hibernate的几点说明

转载 2004年10月11日 16:13:00
上面回贴情绪有点激动,希望谅解,我不是因为有人批评Hibernate而感到不快,而是因为帖子里面的观点实在让我觉得荒谬。不管觉得Hibernate好也吧,不好也吧,我唯一觉得遗憾的是,在中文论坛里面找不到一个对Hibernate的真正高水平的评价。在TSS上有一个关于Hibernate的hot thread,跟了几百贴,其中包括Hibernate作者Gavin和LiDO JDO的CTO,对于JDO和Hibernate有过一些激烈的争论,我曾经耐心的看了一遍,仍然没有发现针对Hibernate真正有力的攻击,那些所谓的攻击无非针对Hibernate没有一个GUI的配置工具,没有商业公司支持,没有标准化等等这些站不住脚的理由。

补充几点我的意见:

一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。

二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。

三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是Entity Bean的替代者出现的,让我再列一次我已经列n次的框架结构:

传统的架构:
1) Session Bean <-> Entity Bean <-> DB
为了解决性能障碍的替代架构:
2) Session Bean <-> DAO <-> JDBC <-> DB
使用Hibernate来提高上面架构的开发效率的架构:
3) Session Bean <-> DAO <-> Hibernate <-> DB

就上面3个架构来分析:
1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。

2、运行效率:如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构表现出最快的运行效率。EB的架构效率会差的很远。

3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EB架构很可能会失败。

4、分布式,安全检查,集群,负载均衡的支持
由于有SB做为Facade,3个架构没有区别。

四、EB和Hibernate学习难度在哪里?

EB的难度在哪里?不在复杂的XML配置文件上,而在于EB运用稍微不慎,就有严重的性能障碍。所以难在你需要学习很多EJB设计模式来避开性能问题,需要学习App Server和EB的配置来优化EB的运行效率。做EB的开发工作,程序员的大部分精力都被放到了EB的性能问题上了,反而没有更多的精力关注本身就主要投入精力去考虑的对象持久层的设计上来。

Hibernate难在哪里?不在Hibernate本身的复杂,实际上Hibernate非常的简单,难在Hibernate太灵活了。

当你用EB来实现持久层的时候,你会发现EB实在是太笨拙了,笨拙到你根本没有什么可以选择的余地,所以你根本就不用花费精力去设计方案,去平衡方案的好坏,去费脑筋考虑选择哪个方案,因为只有唯一的方案摆在你面前,你只能这么做,没得选择。

Hibernate相反,它太灵活了,相同的问题,你至少可以设计出十几种方案来解决,所以特别的犯难,究竟用这个,还是用那个呢?这些方案之间到底有什么区别呢?他们的运行原理有什么不同?运行效率哪个比较好?光是主键生成,就有七八种方案供你选择,你为难不为难?集合属性可以用Set,可以用List,还可以用Bag,到底哪个效率高,你为难不为难?查询可以用iterator,可以用list,哪个好,有什么区别?你为难不为难?复合主键你可以直接在hbm里面配置,也可以自定义CustomerType,哪种比较好些?你为难不为难?对于一个表,你可以选择单一映射一个对象,也可以映射成父子对象,还可以映射成两个1:1的对象,在什么情况下用哪种方案比较好,你为难不为难?

这个列表可以一直开列下去,直到你不想再看下去为止。当你面前摆着无数的眼花缭乱的方案的时候,你会觉得幸福呢?还是悲哀呢?如果你是一个负责的程序员,那么你一定会仔细研究每种方案的区别,每种方案的效率,每种方案的适用场合,你会觉得你已经陷入进去拔不出来了。如果是用EB,你第一秒种就已经做出了决定,根本没得选择,比如说集合属性,你只能用Collection,如果是Hibernate,你会在Bag,List和Set之间来回犹豫不决,甚至搞不清楚的话,程序都没有办法写。

面试官过来谈几点面试过程中的体会

工作这些年,从最初从学校毕业找工作被别人面再到现在面试别人,
  • carolzhang8406
  • carolzhang8406
  • 2014年10月02日 10:05
  • 719

几点说明

近来宿舍网络故障,故无法更新,记录因此缺失几天。 Release 4个Uranus小板,工作告一段落。Lapetus的板子今天恰好回来,工作连接竟如此流畅。下午NV过来推介他们G13显卡。画面不同凡响...
  • uspark
  • uspark
  • 2010年05月11日 19:22
  • 192

【Hibernate】——核心对象

Hibernate开发步骤             Hibernate是一种体现ORM思想的框架,那么它的开发步骤也就显而易见了。用一句简单的话概括就是建类、映射、导出表开发。            ...
  • xdd19910505
  • xdd19910505
  • 2016年04月27日 19:47
  • 698

匿名内部类的几点说明

1.匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。 2.匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类的对象。 3.匿名内部类不能定...
  • lidalong0408
  • lidalong0408
  • 2012年11月07日 23:58
  • 439

bootloader的几点说明

http://www.cnblogs.com/nufangrensheng/p/3659199.html
  • fallune1
  • fallune1
  • 2017年10月30日 15:56
  • 51

位域的几点说明

位域,就是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。 1、很多书上都说,位域存储在同一个字节中,不能跨两个字节存储。个人发现这个规则有问题,下面的例子在vs 2005下能正确...
  • zhuliting
  • zhuliting
  • 2011年10月01日 10:49
  • 674

Tomcat配置的几点说明

tomcat配置的几点说明: 1. 如何加大tomcat连接数 在tomcat配置文件server.xml中的配置中,和连接数相关的参数有: minProcessors:最小空闲连接...
  • waltertan1988
  • waltertan1988
  • 2015年04月26日 17:57
  • 185

函数调用的几点说明:

当在一个函数的运行期间调用另外一个函数时,在运行被调函数之前,系统需要完成三件事: 1. 将所有的实际参数,返回地址等信息传递给被调函数保存 2. 为被调函数的局部变量(也包括形参)分配存储空间 ...
  • guo20082200
  • guo20082200
  • 2017年06月08日 15:59
  • 114

NSNotification的几点说明

原文地址:http://blog.csdn.net/wzzvictory/article/details/8489516 1、NSNotification消息的同步性 ①NSNotificati...
  • liwuking
  • liwuking
  • 2015年05月25日 18:11
  • 470

tomcat配置的几点说明

tomcat中的几点配置说明 1. 如何加大tomcat连接数 在tomcat配置文件server.xml中的配置中,和连接数相关的参数有: minProcessors:...
  • haidong_IT
  • haidong_IT
  • 2014年04月02日 17:13
  • 378
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate的几点说明
举报原因:
原因补充:

(最多只允许输入30个字)