大家跟我去冬眠之综述篇

   最近接触了hibernate,其实前段时间也有所耳闻。先不理会这是怎样的技术,单说这个名字,中文意思是冬眠。SY(史原)说这是让数据在数据库中冬眠,网上也有人这么说。不管如何戏谑都不会过分,别忘了java不过是一杯咖啡。而我认为这个冬眠的对象是我们。他的意思是让我们去冬眠。技术大牛们总是强调程序员要懒惰。这次的hibernate直接让人去冬眠了。够懒。

关于J2EE架构,关于EJB我了解的不多,所以这个轻量级的玩意相对CMP等重量级的优势我无从真切的理解。但人们经历的永远是断代史,从哪里介入,不要过分苛责过去,我们单单看hibernate能为我们带来什么。

数据持久化,太专业的词,没意思;ORM,对象关系映射,我纳闷为什么不能叫ROM。说到底hibernate就是让我们在编程时操作数据像操作对象一样。面向对象思想里要把数据封装,那我们为什么不能用到数据库上?

如果也有人像我一样曾使用满篇的sql语句编造出来到处都可以sql注入的代码就会更加明白hibernate。无非就是封装。当遇到大量数据输入的程序时,处理数据在所难免,最原始的就是直接sql语言从头到尾跟数据库打交道。然后问题出来了,

第一,如果换数据库怎么办?第二,大量的sql语句过于分散,如果修改了一个表名,到处去改?

那么回答第一个问题时,我们会想抽出来一个层,在上层应用和底层具体数据库中隔离一下。也就是所谓的依赖倒置。就像连接sql sever2000和连接my sql的连接字符串不会相同,使用的连接或者命令对象不会一致,所以我们构造出的层把这些具体细节隐藏,向外只暴露统一接口,例如连接就是bool conncet(string conn),查询就是int query(string sql)等。高层针对接口编码,这样第一个问题解决了。

第二个,既然回避不了sql语句,那我们把它们统一到一起,再上层对象处理和我们刚才建造的中间层之间再建一个层,专门接受对象并转化为sql语句的。如此修改sql语句的都去到这个层里,虽然这个层可能会大点,但对于sql语句这也算高内聚了。而不用去管这个层之上或者下的东西。上层的业务层想把一个对象更新到数据库中时只要insert(MyObject)。然后第一中间层把这个MyObject中的数据调出来组织成sql command再调用下一层的insert(sring)。

最后我们想一下,把这两层归并封装掉。是不是很像hibernate-----用面向对象的手段操作数据。

现在再回来说一下hibernate,实现这个技术,需要四块。第一,我们要存入数据库的对象,第二,相关的表单,第三,对象字段到表字段的映射文件,第四,hibernate配置文件。

前两者很容易搞,但是也要注意数据库对象的类型和域,在对象的set访问器中作出相应的验证还是很必要的,以免去到hibernate时抛出异常。

接着说说映射文件,我昨天实现的一个例子,全部参照书籍手写的XML,说实话这个XML真的很大只,比较容易错,我会在以后的讨论中去实验自动生成。其中的第一行是全部XML的必须,其中的<!DOCTYPE>也是必须,因为XML是元语言,它并没有一定的文档规范,需要这个DTD或者scheme去定义。而全部hibernate的DTD都使用<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">即可,我登陆了这个网站,不过没有细心的找到这个dtd。不过功能应该不过如此。用人家官方定义的一个DTD来书写我们的规范。而仔细看这个映射文件的内部,不过是在做一个一对一的映射,跟我们自己编码时把对象不同的字段写入sql语言一个作用。那为什么用配置文件呢?不用配置文件就要硬编码到程序中,而程序一旦编译再修改还要重新编译部署,用配置文件,修改不用动程序,改文件就行。

下面是hibernate的配置文件,这个才是跟连接数据库最相关的一块,因为hibernate的初始化,数据库的连接都在这部分。大家可以找一个最简单的配置文件看一下,最基本的无非就是数据库字符串,用户名,密码等和常规连接数据库一样。

最后,有时候会很陶醉于这些名字,真的都很不错,像java,eclipse,hibernate,spring,lotus。。。。

 

                                                                      by 千冰念 @ YITIAN Studio

posted on 2008-09-06 23:28  荒芜森林  阅读(1589)  评论(5编辑  收藏  举报

导航