学习了段时间ibatis我觉得hibernate有着ibatis无法替代优势
1、开发者都知道hibernate让我们以oo方式操作数据库这让我们看到了hibernate强大的处体验到操作数据方便但Gavin King说hibernate最耀眼的处是hibernate缓存Cache机制而不是以oo方式操作数据库Hibernate缓存Cache机制不外乎是级缓存Cachesession 2级缓存CachesessionFactory和第 3方缓存Cache如ehcache也就是hibernate最强大地方是它缓存Cache理解了这个才能真正理解hibernate缓存Cache实在太难了我至今未能真正理解
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在解决性能问题方面做得非常好
有了它缓存Cache机制使用第 3方缓存Cache和数据库连接池就较好解决性能问题
但这些还不够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、另外还有集合性能(、list、map、.gif' />)都应正确设置
f、正确使用第 3方缓存Cache在读操作频繁写操作不多情况使用第 3方缓存Cache可大幅度提升性能如ehcache缓存Cache策略有:read-onlyread-write和notstrict-read-write
f、 随着hibernate新版本发布和技术发展我相信hibernate性能会越来越好所有性能不是不使用hibernate原因
4、hibernate不仅仅作为持久层orm框架存在它除了dao层持久化操作外还有很多
在注解annotation已经走向主流今天hibernate 迅速响应让xml部署描述符成为可选Hibernate annotation 对大字段处理只是个@Lob就搞定了
hibernate search对Lucene进行了轻量级封装全文检索变得非常简单
Hibernate validator被认为是最合理验证方式将验证策略直接附在贯穿各层领域模型do上不再需要哪些web框架xml方式验证代码中不再出现大量非空/null判断
5、jbpm Jbpm业务流程引擎持久层采用hibenrnate来实现要想使用jbpmhibernate是必须我想业务流程管理无比重要在soa迅速发展今天如果实施soa项目业务流程管理是必然和必须soa就是业务和it技术融合是业务流程管理和it基础架构融合在soa中业务管理是第位这需要相应技术来实现该业务流程管理开源领域jbpm我想会是首选所以为了将来有可能实施soa项目为了实现soa业务流程管理应该使用hibernate
6、大家都知道hibernate将ejb2时代实体bean赶进了历史而ejb3jpa标准也只不过是hibernate子集而已jsr规范标准请求威力是巨大没有各种jsr规范标准请求就不会有各种应用框架各种应用框架只是那些jsr规范标准请求实现者jpa作为持久层规范标准标准引导持久层orm框架方向jpa同样以面向对象方式操作数据库而不是写sql语句规范标准标准都完全orm不写sql了你还有理由不跟着它吗?
7、Spring+hibernate+范型+可变参数这是个非常强大组合对应普通crud操作你不再需要重复写那些烦人相似dao层和manager层代码仅仅需要写次就完成了所有大量crud操作Ibatis尽管也支持范型但始终没有hibernate支持好
8、Jbosshibernate是jboss项目jboss所有项目持久层都采用hibernate要知道jsr规范标准组专家们大多数是来自jboss在定程度上说jboo引领着java发展方向使用hibernate跟着jboss不偏离java发展方向
9、Gavin King我最崇拜偶像他不仅发明了强大hibernate还搞出了同样强大且优雅web2.0应用框架seam他是ejb3.0专家组成员的是jpa规范标准请求领导者他java领域最有发言权、最权威领袖人物的现在他领导web beanjsr299发展web bean规范标准制定全球软件Software巨头如ibm、oracle、bea和apache没有个反对纷纷响应Web bean想象起来实在太美好了完全松耦合和强类型所有应用组件生活在个应用组件上下文context中相互合作那时将不再有各种各样上下文环境不再有struts2ActionContext不再有springApplicationContext不再有hibernatesession不再有持久化上下文不再有事务上下文不再有安全上下文所有组件生活在个大家庭中大家其乐融融实现天下大和平
10、 osgi我认为现在最值得学习个技术有了osgi实现真正多模块开发改变传统开发方式现在已经有了hibernate osgispring dynamic modul(osgi),struts 2 同样实现了对osgi支持目前eclipse是基于osgi开发ibmwebsphere v6.1bea所有产品都重构在osgi上spring应用服务器同样基于osgi在EclipseCon2007上osgi成为了主要话题Osgi受到如此待遇点不奇怪他具有无比强大功能改变传统软件Software开发方式Osgi采用树设计模式将个项目分成多个模块(bundle)每个模块单独部署单独运行说白了就是将个工程分成许多插件每个插件单独开发重复使用实现完全即插即用太令人激动了如果公司软件Software开发基于osgi将会有大量重复使用osgi bundles公司将会积累大量无形资产软件Software开发将会越来越快而ibatis现在还没见到对osgi支持
11、hibernate社区非常繁荣ibatis则相对平静
综述hibernate还有很多优秀特点只是我们不知道Hibernate和ibatis就像大家闺秀对小家碧玉大家闺秀不仅具有小家碧玉全部而且知名度更高更受尊敬更受人追捧更有发展前途小家碧玉尽管也很有魅力但始终比上大家闺秀
Hibernate所做不仅仅是dao层持久化工作而ibatis恰恰如此
选择hibernate选择orm王者选择更全面工作体验选择更高效工作方式选择更多利润;选择Gavin King跟着领袖走;选择jboss追随开源潮流不偏离java发展方向
切都不是借口切都在发展hibernate会越来越好
最新评论