Hibernate和IBatis对比
2014-03-04 09:04:36 By: shinyuu
项目也做过几个, 使用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框架、从文档的丰富性、产品的完善性、版本的开发速度都要强于iBATIS8、最关键的一句话是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的留言板)
感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛