Hibernate与iBATIS的较量浅析

开发 后端
Hibernate与iBATIS的较量浅析向你介绍他们的角色定义以及Hibernate与iBATIS的区别,对于你了解他们是很有帮助的。

Hibernate与iBATIS的比较,首先我们从他们的简介开始:

Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分了。

iBATIS 是另外一种优秀的O/R mapping框架,目前属于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开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。

Hibernate与iBATIS的对比:
 
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的比较就向你介绍到这里,希望上述的一些体验之言能和你有所共鸣。

【编辑推荐】

  1. iBATIS配置浅析
  2. iBATIS测试类的详细写法
  3. iBATIS使用之高级查询技术详解
  4. iBATIS分页源码真相探讨
  5. iBATIS教程之入门浅析
责任编辑:仲衡 来源: 互联网转载
相关推荐

2009-07-15 17:52:10

2009-09-24 14:04:25

Hibernate i

2009-07-17 13:13:47

iBATIS Hibe

2009-09-22 13:12:25

Hibernateibatis

2009-07-15 16:26:04

iBATIS Clob

2009-07-21 11:12:00

iBATIS配置

2009-07-17 10:59:59

iBATIS接口

2017-10-26 14:59:47

MybatisHibernate数据库

2009-09-21 16:56:14

Hibernateibatis

2009-07-15 17:58:07

iBATIS 动态映射

2009-07-22 10:42:59

iBATIS Cach

2009-07-16 10:23:30

iBATIS工作原理

2009-08-27 10:08:36

C#隐含类型局部变量

2011-08-11 10:22:59

ibatishibernate

2009-07-22 13:04:41

iBATIS动态查询

2009-07-20 18:00:16

iBATIS DAO事

2009-07-17 10:32:45

iBATIS MapB

2009-07-15 17:19:31

iBATIS Ecli

2009-07-22 10:03:11

iBATIS Resu

2009-07-16 09:14:26

iBATIS DAO
点赞
收藏

51CTO技术栈公众号