大家跟我去冬眠之综述篇

   最近接触了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 YITIAN Studio 阅读(1303) 评论(5)  编辑 收藏 网摘 所属分类: 6//模式架构

评论

#1楼 2008-09-07 09:56 Justin      

有点乱,到底想说啥?   回复  引用  查看    

#2楼[楼主] 2008-09-07 10:01 YITIAN Studio      

@Justin
看来程序员总是很挑剔并且没有耐心的。
想说什么不重要。看你想要什么,有就好,没有就算了。。。
  回复  引用  查看    

#3楼 2008-09-07 10:37 金色海洋(jyk)      

确实有点晕。
  回复  引用  查看    

#4楼 2008-09-07 10:43 temptation      

还是 《spring依赖注入》那篇写的好   回复  引用  查看    

#5楼 2008-09-07 16:26 水言木      

解释Hibernate,不如通过O和R之间的矛盾来解释,ORM的出现,不就是为了解决O和R之间的矛盾,才在其间架一个Data Mapper么,而Hibernate,是Data Mapper的一种实现方式:Metadata Data Mapper   回复  引用  查看    

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1285828




相关文章:

相关链接:
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

公告

一天工作室,五个大学生组成的团队。最开始是为了做作业。 现在我们致力于做更好的自己。和所有大学生,程序员一起探讨技术,人生。这个博客会见证我们的成长。

留言簿

我参加的小组

随笔分类

相册

我的连接

积分与排名

最新评论

阅读排行榜

评论排行榜