新技术论坛
搜索
查看: 1305|回复: 0
打印 上一主题 下一主题

[Java] Mybatis与Ibatis比较

[复制链接]
  • TA的每日心情
    无聊
    2016-8-8 14:30
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-7-27 10:03:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
           随着开发团队转投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实现了接口绑定,使用更加方便。
    iBatis / MyBatis 3提供了一个新的功能:的注解。

    转:http://jc-dreaming.iteye.com/blog/1003778




    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2024-12-23 06:12 , Processed in 0.134000 second(s), 18 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表