注册 登录
编程论坛 J2EE论坛

[讨论]Hibernate的优点及其缺点.

susan001983 发布于 2007-08-14 10:56, 4277 次点击
讨论:Hibernate的优点及其缺点.
17 回复
#2
hardes2007-08-15 17:05

那你觉得优点跟缺点是什么呀? 你总得说点啊!?
空手套白狼吗你??

#3
ermaogogo2007-08-15 20:16
SSH..除了加快进发效率之外.其实用反射做的东西反尔还可能影响效率.你必须得会配置它的高级属性,比如像一 二级缓存..学内功最好,不要只学招式.
#4
susan0019832007-08-16 10:02
优势:
使用Hibernate操作数据库,代码量很少,用Hibernate完成用户就感觉像使用对象一样去使用数据库,所有的操作过程都是通过POJO类完成.

还有想发言的吗?

2楼,你回答一个吧,说说你对Hibernate的看法.
#5
hardes2007-08-16 10:26
我还没学呢?不知道,呵呵
#6
susan0019832007-08-16 10:30
2楼,你没学,也可以现在去了解一下嘛.

学习知识不怕晚.

只要你肯努力.
#7
hardes2007-08-16 10:33
你教我好不好??
好吗??
#8
hardes2007-08-16 15:27

我来说两句,我从软件架构来说下我的看法,Hibernate的出现,软件的设计从原来的三层架构中分离出一个持久层来,当实际业务中表的设计更改的时候,我们不需要过多的修改业务逻辑代码,使得各层之间维护起来比较方便,但分层越多,那么在软件设计阶段也越复杂.

Hibernate是针对于对象和数据库映射的一种中间件技术,因此在数据模型和对象模型的设计方面就更加显得很重要了,
这时候关心的不仅仅是数据库的设计,还要关心对象模型的设计.两者之间的映射显得就更加重要了,因为模型设计中粗细粒度的控制也能影响到软件运行时候的效率.

虽然Hiernate提供了强大的持久化对象的检索方式,检索持久化对象时也很方便快捷,效率也很快.但也是在模型设计良好的情况之下,相反,一但模型设计存在问题,检索方式以及检索策略的优势就无法体现了,说不定还会成为其缺点.


综上所述,Hibernate是一柄双刃剑.而在我看来,与其说Hibernate是一种技术,还不如说是一种艺术,一种设计艺术.


以上纯属个人意见,见笑了,呵呵...

[此贴子已经被作者于2007-8-16 15:29:48编辑过]

#9
无理取闹2007-08-16 15:30
优点就是简单
缺点嘛 就是简单
#10
stephen7222007-08-16 15:34
以下是引用ermaogogo在2007-8-15 20:16:15的发言:
SSH..除了加快进发效率之外.其实用反射做的东西反尔还可能影响效率.你必须得会配置它的高级属性,比如像一 二级缓存..学内功最好,不要只学招式.

搂主说的是hibernate,你干吗把ssh都拉出来?
反射就会影响效率?这个在jdk1.4之前可能会,但是新版本的反射机制已经做的很好了,一般应用不会有什么明显的影响。
hibernate作为需要N(N>8)个人的大型开发来说可能是一个不错的选择,但是开发一般的系统我觉得他的灵活性还是不够好的,这点就不得不提到ibatis了,ibatis虽说只能够算是一个半成品的ORM,但是他保留的灵活的sql语句使得在一般的项目里能够左右逢源。

[此贴子已经被作者于2007-8-16 15:36:00编辑过]

#11
ermaogogo2007-08-17 07:27

HOHO,,一句话:框架把现在所有从PT开始的人都白痴化了,还是多了解底层点,提高实际解决能力咯?还有试问哪个写框架的不是从per1,CGI,c这些老一代的牛人中起来的哇?楼主明明晓得,还去绕别个二楼的.做人要厚道哈!!怎么没人通宵?
还有 黄油标大哥 的MSN是好多哇.找你多请教请教了.小弟ermaogogo@hotmail.com,喜欢Java的都可以+.. 纯属个人见解.

[此贴子已经被作者于2007-8-17 8:18:09编辑过]

#12
susan0019832007-08-17 15:01

不要引起争执,大家来这里是为了交流.

带感情色彩的语言还是少出现的好.

#13
hardes2007-08-17 17:06
啥叫感情色彩啊?
解释下......
#14
支离破碎2007-08-19 20:19
Hiberante有时候用的你会想自杀的...


回11楼的,框架不是让IT人员变白痴,大项目很多都是几年的项目,如果没的一个好的架构,出现的问题可能是你想都想不到的,有时候用框架可以简单化很多多的东西,让有专长的人专注于其强力的方面...还有就是,语言是进步的.
#15
想你的天空2007-08-19 21:56
hibernate不会影响设计, 反而加快项目速度!
前期的设计比较艰苦, 一旦完成, 后面就N快了。
#16
j2ee20082007-08-20 12:01

一、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之间来回犹豫不决,甚至搞不清楚的话,程序都没有办法写。

引用于:http://post.baidu.com/f?kz=19472010

#17
神vLinux飘飘2007-08-20 21:05
Hibernate作为一种持久化框架的存在已经有很悠久的历史了“按IT时间计算”,在当年ORM框架一片混乱的时候Hibernate的确一枝独秀,起到中流砥柱的作用,造成现在Struts+Spring+Hibernate的完美三层开发模式的形成。

可惜的是,随着EJB3的推出Persisence技术从EJB神坛走下千家万户,成为JAVA语言中首推的数据库访问方式,成为ORM框架的标准。
讽刺的是,EJB3的主要参与者竟然是Hibernate的作者...

所以,我觉得,Hibernate可以看好,但是Entity类更加值得关注,顺便说说,随着Persisence的日益推广,Hibernate3.2已经正式获得JPA的认证,这意味这Hibernate也已经是Persisence标准的一个实现了。希望大家能够看清未来,不要在沉迷在Hibernate中。Persisence才是最有前途的ORM标准,HibernateEntityManager只是它的一个具体实现而已。

常用的JPA:

名称:TopLink
公司:Oracle


名称:OpenJPA
公司:BEA


名称:HibernateEntityManager
公司:RedHat
#18
susan0019832007-08-22 09:15

时代发展的真快呀,我才用到,Hibernate3.1

又出现了这么多新东西.

1