ibatis2.x与mybatis(ibatis3.x)的比较

转载 2012年03月30日 22:27:11

转载于:http://zhaohe162.blog.163.com/blog/static/382167972011111114742371/

       iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。

随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis
虽然从正式版发布至今也有近一年时间,官方也非常友好的提供了中文版的使用手册,不过相信很多人还在项目中使用ibatis2.x版本。
究竟Mybatis有哪些新特性,能给我们带来哪些好处呢?以下是我研究后的一点总结

1、Mybatis实现了接口绑定,使用更加方便。
在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件,
而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。
这可以说是Mybatis最重要的改进。

注意:
虽然Mybatis支持在接口中直接使用annotation的配置方式来简化配置,
不过强烈建议仍然使用xml配置的方式。毕竟annotation的配置方式功能有限且代码入侵性太强。使用xml配置方式才能体现出Mybatis的优势所在

2、对象关系映射的改进,效率更高
相信很多在使用ibatis2.x的朋友并没有通过ibatis的xml映射文件来实现对象间的关系映射。其实也确实没有必要那么做,因为ibatis2.x采用的是“嵌套查询”的方式将对象之间的关系通过查询语句的直接拼装来实现,其效果和在DAO或Service中自行封装是一样的。
不过这种方式存在“N+1查询问题”。
概括地讲,N+1查询问题可以是这样引起的:
? 你执行了一个单独的SQL语句来获取结果列表(就是+1)。
? 对返回的每条记录,你执行了一个查询语句来为每个加载细节(就是N)。
这个问题会导致成百上千的SQL语句被执行。这通常不是期望的。

而在Mybatis中,除了兼容ibatis2.x中的“嵌套查询”方式外,还提供了直接“嵌套结果”的方式,其效果相当于直接通过一句sql将查询出的dto对象自动封装成所需的对象。
具体实现方法请自行参考Mybatis官方使用手册,不在此累述.

不过实际上这一改进所带来的好处也是很有限的。因为这一方式在使用分页的时候并不起作用,或者说嵌套对象的结果集是不允许进行分页的。这一点在Mybatis框架中已经做出了明确的限制(org.apache.ibatis.executor.resultset.NestedResultSetHandler里34行),而实际项目中需要分页的情况又特别多……
仔细一想,一对多映射确实不能通过配置文件来分页,因为这时查询出的记录数并不等于实际返回对象的size,不过一对一映射为什么也不允许就不太明白了。可能是因为一对一是一对多的特例,而在设计框架的时候并没有考虑去处理或是难于处理这一特例吧。

3、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。
熟悉struts2的人应该对OGNL表达式不会感到陌生,
MyBatis采用OGNL表达式简化了配置文件的复杂性,使用起来更简洁。


补充:比较遗憾的是,Mybatis的分页继续沿用ibatis2.x的逻辑分页方式,依赖于JDBC的规范。大数据量时会出现性能问题,要想实现物理分页还得自己想办法改了。


.

float型变量和“零值”比较的方法

前一段时间读了一下林锐博士的《高质量C/C++编程指南》,其中有一个比较经典的问题。请写出float x与“零值”比较的if语句? 当时只知道不能直接用float类型的值与0进行“==”或“!=...
  • u014596240
  • u014596240
  • 2015年03月27日 22:36
  • 1583

【程序15】TestCompare.java 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析:我们想办法把最小的数放到x上, //先将x与y进行比较,如果x>y则将x与y的值

//【程序15】TestCompare.java 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析:我们想办法把最小的数放到x上, //先将x与y进行比较,如果x>y则将x与y...
  • u014657292
  • u014657292
  • 2014年04月12日 08:32
  • 1491

Python2.x和3.x主要差异总结

开始使用Python之后就到处宣扬Python如何如何好,宣传工作的一大重要诀窍就是做对比,比如原先用Java的时候做个什么东西要写多少代码,怎么个别扭,现在用Python实现同样的功能怎么个简单等等...
  • etherlai
  • etherlai
  • 2015年03月29日 16:27
  • 2356

from ibatis2.x to mybatis 3.x

This article is from the Official Website !   This page provides some information that is useful...
  • maomao123mao
  • maomao123mao
  • 2011年10月05日 09:14
  • 622

ibatis2.x与mybatis(ibatis3.x)的比较

随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis  虽然从正式版发布至今也有近一年时间,官方也非常友好的提供了中文版的使用手册,不过相信很多人还在项目中使用ib...
  • zhikun518
  • zhikun518
  • 2012年01月08日 14:08
  • 834

from ibatis3.x to mybatis

Introduction MyBatis is a direct fork of the iBATIS code. At the time of this writing, the code is ...
  • maomao123mao
  • maomao123mao
  • 2011年10月05日 09:44
  • 450

从iBATIS 2.x到MyBatis的变化

从iBATIS 2.x到MyBatis的变化 From iBATIS 2.x to MyBatis DocUpgrade3  This page provides ...
  • nethub2
  • nethub2
  • 2012年09月03日 16:04
  • 562

flex3+struts 1.3+spring+ibatis 2.x整合代码实例

flex3+struts 1.3+spring+ibatis 2.x整合代码实例,代码下载地址:http://www.zuidaima.com/share/1778657261997056.htm...
  • yaerfeng
  • yaerfeng
  • 2014年05月12日 09:30
  • 1633

iBatis 2.x 和 MyBatis 3.0.x 的区别

简介:  本文主要讲述了 iBatis 2.x 和 MyBatis 3.0.x 的区别,以及从 iBatis 向 MyBatis 移植时需要注意的地方。 通过对本文的学习,读者...
  • winy_lm
  • winy_lm
  • 2015年12月30日 14:11
  • 285

Hibernate3和MyBatis(iBatis)的执行效率比较

转自: http://blog.chinaunix.net/uid-24337578-id-186321.html   本文旨在提供一些真实的数据,供那些选择Hibernate3还是MyBati...
  • lwfo1
  • lwfo1
  • 2015年05月04日 21:52
  • 403
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ibatis2.x与mybatis(ibatis3.x)的比较
举报原因:
原因补充:

(最多只允许输入30个字)