应用hibernate的11大上风
添加时间:2013-7-29 点击量:
进修了一段时候的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 = “”,如许在删除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的成长标的目标。
一切都不是借口。一切都在成长,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 = “”,如许在删除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的成长标的目标。
一切都不是借口。一切都在成长,hibernate会越来越好。
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》