ibatis 与 mybatis区别

从 iBatis 到 MyBatis,不只是名称上的变化,MyBatis 提供了更为强大的功能,同时并没有损失其易用性,相反,在很多地方都借助于 JDK 的泛型和注解特性进行了简化。iBatis 确实该退休了,因为一个更为出色的继任者经过 10 个 Beta 版本的蜕变已然出现在我们的面前。

iBatis与MyBatis区别

iBatis与Mybatis语法对比

随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis

1、Mybatis实现了接口绑定,使用更加方便

在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件,而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。这可以说是Mybatis最重要的改进。注意:虽然Mybatis支持在接口中直接使用annotation的配置方式来简化配置,不过强烈建议仍然使用xml配置的方式。毕竟annotation的配置方式功能有限且代码入侵性太强。使用xml配置方式才能体现出Mybatis的优势所在

2、对象关系映射的改进,效率更高  Mybatis与Ibatis的区别

在使用ibatis2.x时并没有通过ibatis的xml映射文件来实现对象间的关系映射。其实也确实没有必要那么做,因为ibatis2.x采用的是“嵌套查询”的方式将对象之间的关系通过查询语句的直接拼装来实现,其效果和在DAO或Service中自行封装是一样的。而在Mybatis中,除了兼容ibatis2.x中的“嵌套查询”方式外,还提供了直接“嵌套结果”的方式,其效果相当于直接通过一句sql将查询出的dto对象自动封装成所需的对象。这一方式在使用分页的时候并不起作用,或者说嵌套对象的结果集是不允许进行分页的。

3、iBatis / MyBatis 3提供了一个新的功能:注解。MyBatis采用功能强大的基于OGNL的表达式来消除其他元素

1、 全局配置文件命名

iBatis 通常把为 sqlMapConfig.xml,文件名本身并没有要求,在 MyBatis 中经常会将该文件命名为 Configuration.xml

2、全局配置文件:

1)两者的映射文件 DTD 约束不相同

2)设置属性的区别 settings 

3)配置事务管理器和数据源的区别:Mybatis增加属性:environments,通过 <environments> 来进行数据源管理,主要是为了简化在多套数据源配置之间的切换,比如开发和发布使用不同的配置。

3、在映射文件中配置 SQL 语句:

1)在 iBatis 中,namespace 不是必需的,且它的存在没有实际的意义。在 MyBatis 中,namespace 终于派上用场了,它使得映射文件与接口绑定变得非常自然 ---<mapper namespace=”mybatis.demo.UserInfoMapper”>

2)指定映射文件的方式的区别

1、iBatis:<sqlMap resource=… /> <sqlMap resource=… /> <sqlMap resource=… />

MyBatis :<mappers> <mapper resource=… /> <mapper resource=… /> </mappers>

2、iBatis:    <select id="selectDeviceByWhere" parameterClass="Map"  resultClass="BaseResultMap">  </select>

MyBatis:<select id="selectDeviceByWhere" parameterType="Map"   resultType="BaseResultMap">   </select>

3、 IBatis是使用#  #和$   $来接受参数的。使用方法等同于MyBatis;# #=#{  },$ $=${  }.    mybatis/ibatis ${}与#{}的区别

4、判断语句

MyBatis很简单,只要在where 或者if  的标签里面添加test=""就可以了,里面写判断条件了

IBatis的就麻烦了许多了,它将每个都方法都进行了封装:

isNull:判断property字段是否是null        

<isNull prepend="and" property="id">   </isNull>    -----prepend就是代表着添加在动态语句前面。 property就是被比较的属性。 

isEqual相当于equals,判断状态值。

<isEqual property="state" compareValue="0">  </isEqual> 或 <isEqual property="state" compareProperty="nextState">  </isEqual>

isEmpty判断参数是否为Null或者空,满足其中一个条件则其true。 isNotEmpty相反,当参数既不为Null也不为空是其为true。    

5、循环

Iterate:这属性遍历整个集合,并为 List 集合中的元素重复元素体的内容。

Iterate 的属性: 

prepend  ----可被覆盖的 SQL 语句组成部分,添加在语句的前面(可选)           

property  ----类型为 java.util.List 的用于遍历的元素(必选)

open----整个遍历内容体开始的字符串,用于定义括号(可选)                             

close----整个遍历内容体结束的字符串,用于定义括号(可选)

conjunction ----每次遍历内容之间的字符串,用于定义 AND 或 OR(可选)       

<iterate> 遍历类型为 java.util.List的元素。 

例子:

<iterate prepend="AND" property="userNameList" open="(" close=")" conjunction="OR">      

                         username=#userNameList[]#  

<iterate>   

MyBatis使用的是ForEach方法。他可以遍历List,[](array),Map三种元素。

foreach属性:

item ----循环体中的具体对象(必选)           

collection---- 要做foreach的对象(必选)           

open ---整个遍历内容体开始的字符串,用于定义括号(可选) 

close  ----整个遍历内容体结束的字符串,用于定义括号(可选)

separator----元素之间的分隔符(可选)

index----在list和数组中,index是元素的序号,在map中,index是元素的key(可选)

 例子:

<foreach item="item" collection="list" separator="," open="(" close=")" index="">      

                   #{item.id}   

</foreach>              

6、dynamic:去除它的代码块中的第一个prepend里面的字符。然后他也有自己的prepend标签,作用也是在语句前面添加修饰符,比如where。而在MyBatis里是<where></where>.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355