Mybatis与Ibatis的区别

 更新时间:2016年05月05日 10:09:11   作者:u_wei_wei  
这篇文章主要介绍了Mybatis与Ibatis的区别,需要的朋友可以参考下

Mybatis与Ibatis的区别:
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提供了一个新的功能:注解。

相关文章

  • javaweb上传下载实例完整版解析(上)

    javaweb上传下载实例完整版解析(上)

    这篇文章主要为大家详细解析了javaweb上传下载实例,本文重点在于文件上传功能的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 详解JAVA 设计模式之状态模式

    详解JAVA 设计模式之状态模式

    这篇文章主要介绍了JAVA 状态模式的的相关资料,文中讲解的非常细致,帮助大家更好的学习理解JAVA 设计模式,感兴趣的朋友可以了解下
    2020-06-06
  • Java如何使用jar命令打包

    Java如何使用jar命令打包

    把多个文件打包成一个压缩包——这个压缩包和WinZip的压缩格式是一样的,区别在于jar压缩的文件默认多一个META-INF的文件夹,该文件夹里包含一个MANIFEST.MF的文件,本文给大家介绍Java如何使用jar命令打包,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • Java实现高校教务系统

    Java实现高校教务系统

    这篇文章主要为大家详细介绍了Java实现高校教务系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • MybatisPlus将自定义的sql列表查询返回改为分页查询

    MybatisPlus将自定义的sql列表查询返回改为分页查询

    本文主要介绍了MybatisPlus将自定义的sql列表查询返回改为分页查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • 解决线程并发redisson使用遇到的坑

    解决线程并发redisson使用遇到的坑

    这篇文章主要介绍了解决线程并发redisson使用遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Spring事件监听机制使用和原理解析

    Spring事件监听机制使用和原理解析

    Spring的监听机制基于观察者模式,就是就是我们所说的发布订阅模式,这种模式可以在一定程度上实现代码的解耦,本文将从原理上解析Spring事件监听机制,需要的朋友可以参考下
    2023-06-06
  • spring容器初始化遇到的死锁问题解决

    spring容器初始化遇到的死锁问题解决

    这篇文章主要给大家介绍了关于spring容器初始化时候遇到的死锁问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 详解Java中的数组与字符串相关知识

    详解Java中的数组与字符串相关知识

    这篇文章主要介绍了详解Java中的数组与字符串相关知识,包括操作字符串的一些基本方法列举,需要的朋友可以参考下
    2015-09-09
  • Idea2020 无法share项目到svn的解决方法

    Idea2020 无法share项目到svn的解决方法

    这篇文章主要介绍了Idea2020 无法share项目到svn的解决方法,需要的朋友可以参考下
    2020-09-09

最新评论