`

开源对象关系映射框架hibernate 11大优势

 
阅读更多
发布时间:2009.06.19 11:42     来源:blogjava    作者:Werther

Hibernate在解决性能问题方面做得非常好。有了它的缓存机制,使用第三方缓存和数据库连接池,就较好的解决的性能问题。但这些还不够,hibernate给了开发者足够的自由,让开发者自己去控制性能问题。

学习了一段时间的ibatis,我觉得hibernate有着ibatis无法替代的优势。


1、开发者都知道,hibernate让我们以oo的方式操作数据库,这让我们看到了hibernate的强大之处,体验到操作数据的方便。但Gavin King说,hibernate最耀眼之处是hibernate的缓存机制,而不是以oo的方式操作数据库。Hibernate的缓存机制不外乎是一级缓存session,二级缓存sessionFactory,和第三方缓存如ehcache.也就是hibernate的最强大的地方是它的缓存,理解了这个才能真正的理解hibernate.缓存实在太难了,我至今未能真正理解。


2、可维护性:ibatis宣扬写sql语句,它将sql语句放进一个单独的xml文件,这种方式赢得了很多开发者的喜爱,一句话,方便维护。但hibernate同样具有这种功能,而且比ibatis更加强大。Hibernate的命名查询/命名参数查询,就是将hql语句放在一个单独的xml文件之中,它仍然让人们以面向对象的方式去操纵数据,这得到大量遵循oo方式开发者的喜爱,而不用在以oo的方式写着代码的同时,然后再转变思维,用面向关系的方式去写那些sql语句。但hibernate不仅做了这些,它的native sql查询方式,完全满足sql语句的偏爱者,它像ibatis一样,将sql语句放在配置文件之中。


3、性能:我坚信,hibernate性能问题不是问题。想想那么多大中小项目都在使用hibernate,你还怀疑hibernate的性能吗?spring整合hibernate之后,在真正性能瓶颈的地方,完全可以使用spring集成的jdbc,或直接写存储过程得了。但首先得确认,这实在是性能瓶颈的地方,我想,不应想当然的认为性能的问题,所谓的性能问题阻挠了很多人。


我认为,性能的好坏无外是发送sql语句的多少而已。性能好,发送的sql语句少,性能差,就是发送大量的sql语句。Hibernate在解决性能问题方面做得非常好。


有了它的缓存机制,使用第三方缓存和数据库连接池,就较好的解决的性能问题。


但这些还不够,hibernate给了开发者足够的自由,让开发者自己去控制性能问题。


我认为开发者可以在以下几个方面自行调优:


a、在查询字符串中,应该总是使用jdbc的占位符?,或使用使用命名参数:,不要自查询中使用字符串值来代替非常量值。


b、Flush会影响性能,频繁刷新影响性能,尽量减少不必要的刷新。


c、Cascade策略,在几对几的关系,正确设置cascade策略,想清楚在操作对象A的同时是否需要级联操作对象B,比如在one to many的父子关系中,删除了父亲one,需级联删除子many,这时的one这端可设置cascade = “delete”,这样在删除one时,会自动删除子,但对子的操作不会影响父。Cascade还有其他的属性值,只要设置正确,可提升性能。


d、lazy策略,正确设置延迟加载策略同样会提升性能,在one to many或many to many中,通常总应该延迟加载many的一方的到内存。设置了lazy = “true”,首先发送sql语句,加载自己到内存,到需要时才加载级联对象;lazy=“false”,则会同时加载自己和级联对象到内存。


e、另外还有集合的性能(set、list、map、array),都应正确设置。


f、正确使用第三方缓存,在读操作频繁写操作不多的情况,使用第三方缓存可大幅度提升性能,如ehcache的缓存策略有:read-only,read-write和notstrict-read-write.


f、 随着hibernate新版本的发布,和技术的发展,我相信hibernate的性能会越来越好,所有性能不是不使用hibernate的原因。


4、hibernate不仅仅作为持久层的orm框架存在,它除了dao层的持久化操作外,还有很多。


在注解annotation已经走向主流的今天,hibernate 迅速响应,让xml部署描述符成为可选的。Hibernate annotation 对大字段的处理只是一个@Lob就搞定了。


hibernate search对Lucene进行了轻量级的封装,全文检索变得非常简单。


Hibernate validator被认为是最合理的验证方式,将验证策略直接附在贯穿各层的领域模型domain上,不再需要哪些web框架的xml方式的验证,代码中不再出现大量的非空/null的判断。


5、jbpm, Jbpm业务流程引擎的持久层采用hibenrnate来实现,要想使用jbpm,hibernate是必须的。我想,业务流程管理无比重要,在soa迅速发展的今天,如果实施soa项目,业务流程管理是必然和必须的。因为soa就是业务和it技术的融合,是业务流程管理和it基础架构的融合。在soa中,业务管理是第一位的,这需要相应的技术来实现该业务流程管理。开源领域的jbpm我想会是首选。所以,为了将来有可能实施soa项目,为了实现soa的业务流程管理,应该使用hibernate.


6、大家都知道,hibernate将ejb2时代的实体bean赶进了历史,而ejb3的jpa标准也只不过是hibernate的子集而已。jsr规范请求的威力是巨大的,没有各种jsr规范请求,就不会有各种应用程序框架,各种应用程序框架只是那些jsr规范请求的实现者。jpa作为持久层的规范标准,引导持久层orm框架的方向,jpa同样以面向对象的方式操作数据库,而不是写sql语句。规范标准都完全orm,不写sql了,你还有理由不跟着它吗?


7、Spring+hibernate+范型+可变参数,这是一个非常强大的组合,对应普通的crud操作,你不再需要重复写那些烦人的相似的dao层和manager层的代码,仅仅需要写一次,就完成了所有大量的crud操作。Ibatis尽管也支持范型,但始终没有hibernate支持的好


8、Jboss,hibernate是jboss的项目,jboss的所有项目的持久层都采用的hibernate,要知道,jsr规范组的专家们大多数是来自jboss的,在一定程度上说,jboo引领着java的发展方向。使用hibernate,跟着jboss,不偏离java的发展方向。


9、Gavin King,我最崇拜的偶像,他不仅发明了强大的hibernate,还搞出了同样强大且优雅的web2.0应用程序框架seam.他是ejb3.0专家组成员之一,是jpa规范请求的领导者,他java领域最有发言权、最权威的领袖人物之一。现在,他领导web bean的,jsr299的发展,web bean规范的制定,全球软件巨头如ibm、oracle、bea和apache没有一个反对,纷纷响应。Web bean,想象起来,实在太美好了,完全的松耦合和强类型,所有的应用组件生活在一个应用组件上下文context中,相互合作。那时将不再有各种各样的上下文环境,不再有struts2的ActionContext,不再有spring的ApplicationContext,不再有hibernate的session,不再有持久化上下文,不再有事务上下文,不再有安全上下文,所有组件生活在一个大家庭中,大家其乐融融,实现天下的大和平。


10、 osgi,我认为现在最值得学习的一个技术,有了osgi,实现真正的多模块开发,改变传统的开发方式。现在,已经有了hibernate osgi,spring dynamic modul(osgi),struts 2 同样实现了对osgi的支持。目前,eclipse是基于osgi开发的,ibm的websphere v6.1,bea的所有产品都重构在osgi上,spring的应用服务器同样基于osgi,在EclipseCon2007上,osgi成为了主要的话题。Osgi受到如此的待遇,一点不奇怪,因为他具有无比强大的功能,改变传统的软件开发方式。Osgi采用树设计模式,将一个项目分成多个模块(bundle),每个模块单独部署,单独运行,说白了,就是将一个工程分成许多的插件,每个插件单独开发,重复使用,实现完全的即插即用。太令人激动了。如果公司的软件开发基于osgi,将会有大量的重复使用的osgi bundles,公司将会积累大量的无形资产,软件开发将会越来越快。而ibatis现在还没见到对osgi的支持。


11、hibernate的社区非常繁荣,ibatis则相对平静。


综述,hibernate还有很多优秀的特点,只是我们不知道。Hibernate与ibatis,就像大家闺秀对小家碧玉,大家闺秀不仅具有小家碧玉的全部,而且知名度更高,更受尊敬,更受人追捧,更有发展前途。小家碧玉尽管也很有魅力,但始终比上大家闺秀。


Hibernate所做的不仅仅是dao层的持久化工作,而ibatis恰恰如此。


选择hibernate,选择orm的王者,选择更全面的工作体验,选择更高效的工作方式,选择更多的利润;选择Gavin King,跟着领袖走;选择jboss,追随开源的潮流,不偏离java的发展方向。


分享到:
评论
3 楼 kjj 2009-06-23  
就个人使用而言,hibernate 还是很好的,ibatis 配置方面的东西太多了,我更喜欢用java操作数据,而不是凌乱的sql,只有在性能的确是问题的sql上才使用sp,hibernate的确给开发维护带来了很多方便!!
2 楼 huoyan888 2009-06-23  
hibernate运用起来入门相对ibatis来说感觉要高一些,就像楼主说的HIBERNATE很强大,但强大的东西就是入门门槛高在使用方面需要花更多的精力来调优。
ibatis感觉更精致些,目的就是完成ORM本身的工作。所以依据项目的大小,我想应该配置不同的ORM吧

不过看了楼主的贴收益匪浅,对HIBERNATE有了更深的了解
1 楼 魔力猫咪 2009-06-23  
歌功颂德有点过头。Hibernate也不是没有任何缺点的,这么歌颂会被别人骂的。反正我对Hibernate需要太多的jar包比较讨厌。其他JPA实现需要的Jar比他少太多了。而且所有的ORM均有设计入门难的问题。不懂OO的人用Hibernate弄不好比写SQL要痛苦很多。

相关推荐

    开源对象关系映射框架Hibernate知识培训

    开源对象关系映射框架Hibernate知识培训开源对象关系映射框架Hibernate知识培训

    Hibernate数据持久层框架是一种Java语言下的对象关系映射解决方案.rar

    Hibernate 是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java...

    Android Sqlite OrmLite框架 对象关系映射

    Google开源的基于Android的Sqlite对象关系映射框架 ormlite 压缩包里包含 ormlite-android-4.30.jar 及帮助文档、ormlite-core-4.30.jar核心包 当然也支持在Java中的Jdbc中使用类似Hibernate Sqlite驱动包、ormlite...

    免费开源-Hibernate 的核心对象/关系映射功能

    Hibernate ORM 是一个强大的 Java 对象/关系映射解决方案,可以轻松地为应用程序、库和框架开发持久性逻辑。 Hibernate 实现了 JPA,即 Java 中对象/关系持久性的标准 API,而且还提供了一组超出规范的广泛功能和 ...

    Hibernate数据持久层框架v5.2.13

    Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java...

    开源框架:Hibernate Gossip v1.04

    Hibernate 是“物件/关系对应”(Object/Relational Mapping)的解决方案,简写为ORM,简单的说就是将 Java 中的物件与物件关系,映射至关联式资料库中的表格与表格之间的关系, Hibernate 提供了这个过程中自动对应...

    JavaEE主流开源框架-Hibernate教程rmvb格式.zip

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以...

    利用Hibernate框架实现学生管理信息系统

    开源项目Hibernate是一个实现对象/关系映射的框架,它在Java对象和关系数据库中数据之间建立相应的映射关系,简化了数据库访问操作。将此框架应用于学生信息管理系统中,可充分发挥其优点,提高系统开发效率。

    hibernate3源码

    Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java...

    Hibernate学习笔记

    001 Hibernate 简介(开源 O/R 映射框架) 002 第一个 Hibernate 示例 003 hibernate 主要接口介绍 004 持久对象的生命周期介绍 005 query 接口初步 006 开源 O/R 映射框架内容回顾 007 Hibernate 基本映射标签和属性...

    新建Hibernate项目web.rar

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,是一个全自动的 ORM 框架。 Hibernate 自动生成 SQL 语句,自动执行,使得 Java 程序员可以随心所欲的使用对象编程思维来...

    Hibernate:一个对象/关系映射器工具-开源

    Hibernate是一个对象/关系映射器工具。 它在Java应用程序中非常流行,并且实现了Java Persistence API。... 作为对象/关系映射(ORM)框架,Hibernate关注数据持久性,因为它适用于关系数据库(通过JDBC)。

    Hibernate实践例子程序

    Hibernate 是一个开源的O/R mappimg的框架,基于JDBC提供了一种持久性数据管理的方案,相对于EntityBean来说是相当轻量级的。由于Hibernate是基于 JDBC的,所以它的数据库查寻的能力相对于CMP来说也是异常强大的,...

    rock-0.9开源框架

    rock框架是本人开发的一个开源框架。 rock框架的核心主要是rock-dbutils,rock-dbutils是一个轻量级的ORM框架,对jdbc进行了浅层次的封装。是本人在教学和项目开发中慢慢积累开发而成,用来代替烦人的复杂的hibernate...

    hibernate-orm-5.6.3.rar

    Hibernate数据持久层框架是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate...

    hibernate基础

    本书介绍了轻量级开源框架Hibernate3的功能,主要内容包括Hibernate的基本体系结构、如何使用Java5注解和基于XML的映射文件来表示映射信息,并讨论了HibernateSession对象和HQL的使用。本书适合Java开发人员阅读。 ...

    网上书城系统(Struts+Hibernate+Mysql).zip

    Hibernate框架是一个对象关系映射(ORM)框架,它能够将Java对象与数据库表进行映射,实现Java对象与数据库之间的自动转换。在网上书城系统中,Hibernate框架负责处理与MySQL数据库的交互操作,如查询书籍信息、添加...

    hibernate-3.2完整源码包和4.x模块(ogm、search、validator等)版本包.txt

    Hibernate是开源的ORM对象关系映射框架,包括Session、SessionFactory、Transaction、Query、Criteria和Configuration六核心类和接口。

    rock-0.9.1开源框架

    rock框架是本人开发的一个开源框架。 rock框架的核心主要是rock-dbutils,rock-dbutils是一个轻量级的ORM框架,对jdbc进行了浅层次的封装。是本人在教学和项目开发中慢慢积累开发而成,用来代替烦人的复杂的hibernate...

    struts-hibernate参考文档

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

Global site tag (gtag.js) - Google Analytics