Hibernate在解决性能问题方面做得非常好有了它的缓存机制使用第三方缓存和数据库连接池就 较好的解决的性能问题但这些还不够hibernate给了开发者足够的自由让开发者自己去控制性能问 题
学习了一段时间的ibatis我觉得hibernate有着ibatis无法替代的优势
开发者都知道hibernate让我们以oo的方式操作数据库这让我们看到了hibernate的强大之处 体验到操作数据的方便但Gavin King说hibernate最耀眼之处是hibernate的缓存机制而不是以oo的 方式操作数据库Hibernate的缓存机制不外乎是一级缓存session二级缓存sessionFactory和第三方 缓存如ehcache也就是hibernate的最强大的地方是它的缓存理解了这个才能真正的理解hibernate 缓存实在太难了我至今未能真正理解
可维护性ibatis宣扬写sql语句它将sql语句放进一个单独的xml文件这种方式赢得了很多开 发者的喜爱一句话方便维护但hibernate同样具有这种功能而且比ibatis更加强大Hibernate的 命名查询/命名参数查询就是将hql语句放在一个单独的xml文件之中它仍然让人们以面向对象的方式 去操纵数据这得到大量遵循oo方式开发者的喜爱而不用在以oo的方式写着代码的同时然后再转变思 维用面向关系的方式去写那些sql语句但hibernate不仅做了这些它的native sql查询方式完全满 足sql语句的偏爱者它像ibatis一样将sql语句放在配置文件之中
性能我坚信hibernate性能问题不是问题想想那么多大中小项目都在使用hibernate你还怀 疑hibernate的性能吗?spring整合hibernate之后在真正性能瓶颈的地方完全可以使用spring集成的 jdbc或直接写存储过程得了但首先得确认这实在是性能瓶颈的地方我想不应想当然的认为性能 的问题所谓的性能问题阻挠了很多人
我认为性能的好坏无外是发送sql语句的多少而已性能好发送的sql语句少性能差就是发送 大量的sql语句Hibernate在解决性能问题方面做得非常好
有了它的缓存机制使用第三方缓存和数据库连接池就较好的解决的性能问题
但这些还不够hibernate给了开发者足够的自由让开发者自己去控制性能问题
我认为开发者可以在以下几个方面自行调优
a在查询字符串中应该总是使用jdbc的占位符?或使用使用命名参数不要自查询中使用字符 串值来代替非常量值
bFlush会影响性能频繁刷新影响性能尽量减少不必要的刷新
cCascade策略在几对几的关系正确设置cascade策略想清楚在操作对象A的同时是否需要级联 操作对象B比如在one to many的父子关系中删除了父亲one需级联删除子many这时的one这端可设 置cascade = delete这样在删除one时会自动删除子但对子的操作不会影响父Cascade还有其 他的属性值只要设置正确可提升性能
dlazy策略正确设置延迟加载策略同样会提升性能在one to many或many to many中通常总应 该延迟加载many的一方的到内存设置了lazy = true首先发送sql语句加载自己到内存到需要 时才加载级联对象lazy=false则会同时加载自己和级联对象到内存
e另外还有集合的性能(setlistmaparray)都应正确设置
f正确使用第三方缓存在读操作频繁写操作不多的情况使用第三方缓存可大幅度提升性能如 ehcache的缓存策略有readonlyreadwrite和notstrictreadwrite
f 随着hibernate新版本的发布和技术的发展我相信hibernate的性能会越来越好所有性能不 是不使用hibernate的原因
hibernate不仅仅作为持久层的orm框架存在它除了dao层的持久化操作外还有很多
在注解annotation已经走向主流的今天hibernate 迅速响应让xml部署描述符成为可选的 Hibernate annotation 对大字段的处理只是一个@Lob就搞定了
hibernate search对Lucene进行了轻量级的封装全文检索变得非常简单
Hibernate validator被认为是最合理的验证方式将验证策略直接附在贯穿各层的领域模型domain上 不再需要哪些web框架的xml方式的验证代码中不再出现大量的非空/null的判断
jbpm Jbpm业务流程引擎的持久层采用hibenrnate来实现要想使用jbpmhibernate是必须的 我想业务流程管理无比重要在soa迅速发展的今天如果实施soa项目业务流程管理是必然和必须的 因为soa就是业务和it技术的融合是业务流程管理和it基础架构的融合在soa中业务管理是第一位 的这需要相应的技术来实现该业务流程管理开源领域的jbpm我想会是首选所以为了将来有可能实 施soa项目为了实现soa的业务流程管理应该使用hibernate
大家都知道hibernate将ejb时代的实体bean赶进了历史而ejb的jpa标准也只不过是 hibernate的子集而已jsr规范请求的威力是巨大的没有各种jsr规范请求就不会有各种应用程序框 架各种应用程序框架只是那些jsr规范请求的实现者jpa作为持久层的规范标准引导持久层orm框架 的方向jpa同样以面向对象的方式操作数据库而不是写sql语句规范标准都完全orm不写sql了你 还有理由不跟着它吗?
Spring+hibernate+范型+可变参数这是一个非常强大的组合对应普通的crud操作你不再需要 重复写那些烦人的相似的dao层和manager层的代码仅仅需要写一次就完成了所有大量的crud操作 Ibatis尽管也支持范型但始终没有hibernate支持的好
Jbosshibernate是jboss的项目jboss的所有项目的持久层都采用的hibernate要知道jsr规 范组的专家们大多数是来自jboss的在一定程度上说jboo引领着java的发展方向使用hibernate跟 着jboss不偏离java的发展方向
Gavin King我最崇拜的偶像他不仅发明了强大的hibernate还搞出了同样强大且优雅的 web应用程序框架seam他是ejb专家组成员之一是jpa规范请求的领导者他java领域最有发言 权最权威的领袖人物之一现在他领导web bean的jsr的发展web bean规范的制定全球软件 巨头如ibmoraclebea和apache没有一个反对纷纷响应Web bean想象起来实在太美好了完全 的松耦合和强类型所有的应用组件生活在一个应用组件上下文context中相互合作那时将不再有各 种各样的上下文环境不再有struts的ActionContext不再有spring的ApplicationContext不再有 hibernate的session不再有持久化上下文不再有事务上下文不再有安全上下文所有组件生活在一 个大家庭中大家其乐融融实现天下的大和平
osgi我认为现在最值得学习的一个技术有了osgi实现真正的多模块开发改变传统的开发 方式现在已经有了hibernate osgispring dynamic modul(osgi)struts 同样实现了对osgi的支 持目前eclipse是基于osgi开发的ibm的websphere vbea的所有产品都重构在osgi上spring 的应用服务器同样基于osgi在EclipseCon上osgi成为了主要的话题Osgi受到如此的待遇一点 不奇怪因为他具有无比强大的功能改变传统的软件开发方式Osgi采用树设计模式将一个项目分成 多个模块(bundle)每个模块单独部署单独运行说白了就是将一个工程分成许多的插件每个插件 单独开发重复使用实现完全的即插即用太令人激动了如果公司的软件开发基于osgi将会有大量 的重复使用的osgi bundles公司将会积累大量的无形资产软件开发将会越来越快而ibatis现在还没 见到对osgi的支持
hibernate的社区非常繁荣ibatis则相对平静
综述hibernate还有很多优秀的特点只是我们不知道Hibernate与ibatis就像大家闺秀对小家 碧玉大家闺秀不仅具有小家碧玉的全部而且知名度更高更受尊敬更受人追捧更有发展前途小 家碧玉尽管也很有魅力但始终比上大家闺秀
Hibernate所做的不仅仅是dao层的持久化工作而ibatis恰恰如此
选择hibernate选择orm的王者选择更全面的工作体验选择更高效的工作方式选择更多的利润 ;选择Gavin King跟着领袖走选择jboss追随开源的潮流不偏离java的发展方向
一切都不是借口一切都在发展hibernate会越来越好