欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Hibernate和IBatis对比

程序员文章站 2022-03-01 18:02:44
...

项目也做过几个, 使用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即学即用的简单性