Hibernate和IBatis对比
2014-03-04 09:04:36  By: dwtedx

项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也只是知道几点关于这两个框架的区别, 今天闲着没事干, 从网上找了几篇文章, 做了一个简单的整理、网上关于这两个框架的比较也很多, 只是自己想把别人的东西拿过来整理一下, IBatis和Hibernate的比较


一、Hibernate  VS  iBATIS简介

Hibernate是当前最流行的O/R mapping框架、当前版本是3.05、它出身于sf.net、现在已经成为Jboss的一部分了、iBATIS是另外一种优秀的O/R mapping框架、当前版本是2.0、目前属于apache的一个子项目了、相对Hibernate"O/R"而言、iBATIS 是一种"Sql Mapping"的ORM实现

Hibernate对数据库结构提供了较为完整的封装、Hibernate的O/R Mapping实现了POJO和数据库表之间的映射、以及SQL的自动生成和执行、程序员往往只需定义好了POJO到数据库表的映射关系、即可通过Hibernate提供的方法完成持久层操作、程序员甚至不需要对SQL的熟练掌握、Hibernate/OJB会根据制定的存储逻辑、自动生成对应的SQL并调用JDBC接口加以执行

而iBATIS的着力点、则在于POJO与SQL之间的映射关系、也就是说、iBATIS并不会为程序员在运行期自动生成SQL执行、具体的SQL需要程序员编写、然后通过映射配置文件、将SQL所需的参数、以及返回的结果字段映射到指定POJO、使用iBATIS提供的ORM机制、对业务逻辑实现人员而言、面对的是纯粹的Java对象、这一层与通过Hibernate 实现ORM而言基本一致、而对于具体的数据操作、Hibernate会自动生成SQL语句、而iBATIS则要求开发者编写具体的SQL语句、相对Hibernate而言、iBATIS以SQL开发的工作量和数据库移植性上的让步、为系统设计提供了更大的自由空间


二、二者的对比

1、 iBATIS非常简单易学、Hibernate相对较复杂、门槛较高

2、二者都是比较优秀的开源产品

3、当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合

4、系统数据处理量巨大、性能要求极为苛刻、这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标、在这种情况下iBATIS会有更好的可控性和表现

5、iBATIS需要手写sql语句、也可以生成一部分、Hibernate则基本上可以自动生成、偶尔会写一些Hql、同样的需求,iBATIS的工作量比Hibernate要大很多、类似的、如果涉及到数据库字段的修改、Hibernate修改的地方很少、而iBATIS要把那些sql mapping的地方一一修改

6、以数据库字段一一对应映射得到的PO和Hibernte这种对象化映射得到的PO是截然不同的、本质区别在于这种PO是扁平化的、不像Hibernate映射的PO是可以表达立体的对象继承、聚合等等关系的、这将会直接影响到你的整个软件系统的设计思路

7、Hibernate现在已经是主流O/R Mapping框架、从文档的丰富性、产品的完善性、版本的开发速度都要强于iBATIS

8、最关键的一句话是iBATIS的作者说的:

If you are starting a new project and you´re in full control of your object model and database design, Hibernate is a good choice of O/R tool.

If you are accessing any 3rd party databases (e.g. vendor supplied), or you´re working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That´s were an SQL Mapper comes in handy


三、结论

Hibernate和iBATIS可以说是互相补充,共同发展的关系.具体你想用什么要看实际情况.如果看了上面的文字还是拿不定注意,那就Just to try it.实践是检验真理的唯一标准.鞋合不合适,只有试了才知道


四、选择Hibernate还是iBatis?

选择Hibernate还是iBATIS都有它的道理: Hibernate功能强大、数据库无关性好、O/R映射能力强、如果你对Hibernate相当精通、而且对Hibernate进行了适当的封装、那么你的项目整个持久层代码会相当简单、需要写的代码很少、开发速度很快、非常爽

Hibernate的缺点就是学习门槛不低、要精通门槛更高、而且怎么设计O/R映射、在性能和对象模型之间如何权衡取得平衡、以及怎样用好Hibernate方面需要你的经验和能力都很强才行

iBATIS入门简单、即学即用、提供了数据库查询的自动对象绑定功能、而且延续了很好的SQL使用经验、对于没有那么高的对象模型要求的项目来说、相当完美

iBATIS的缺点就是框架还是比较简陋、功能尚有缺失、虽然简化了数据绑定代码、但是整个底层数据库查询实际还是要自己写的、工作量也比较大、而且不太容易适应快速数据库修改


五、我的建议就是

如果你的团队没有Hibernate高手、那么请用iBATIS、要把Hibernate用好、并不容易;否则你应该选择Hibernate、那样你的开发速度和代码简洁性都相当棒!我觉得rails的ActiveRecord是平衡性做的最好的、避免了Hibernate的复杂性和学习HQL的成本、同时具备iBATIS即学即用的简单性

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+