Mybatis与Ibatis的区别

作者:u_wei_wei 时间:2022-11-19 14:27:42 

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

标签:Mybatis,Ibatis
0
投稿

猜你喜欢

  • Android开发实现Files文件读取解析功能示例

    2021-06-15 04:56:37
  • Spring boot @RequestBody数据传递过程详解

    2022-09-14 12:23:37
  • C#执行外部命令的方法

    2022-12-21 18:03:32
  • java中pdf转图片的实现方法

    2021-07-22 02:26:06
  • java 过滤器filter防sql注入的实现代码

    2023-08-30 09:56:40
  • Java设计模式之命令模式_动力节点Java学院整理

    2023-12-11 13:32:03
  • 2022最新Java泛型详解(360度无死角介绍)

    2022-03-08 15:13:42
  • android 横竖屏限制的配置方法

    2023-02-06 21:55:45
  • C#中抽象方法与虚拟方法的区别

    2021-10-30 07:30:15
  • springboot整合spring-retry的实现示例

    2022-01-13 01:25:53
  • SpringBoot结合Neo4j自定义cypherSql的方法

    2022-05-18 00:41:07
  • mybatis的动态SQL和模糊查询实例详解

    2022-03-10 09:47:03
  • C#文件合并的方法

    2022-08-07 13:22:17
  • XRecyclerView实现下拉刷新、滚动到底部加载更多等功能

    2023-11-07 06:40:55
  • IDEA 中使用 Hudi的示例代码

    2021-08-27 21:51:04
  • C#实现中英文混合字符串截取的方法

    2022-07-11 10:02:35
  • C#动态创建button的方法

    2023-02-11 15:58:26
  • 实例化JFileChooser对象报空指针异常问题的解决办法

    2023-10-05 11:36:18
  • Java中equalsIgnoreCase()方法的使用

    2022-07-28 15:13:45
  • Flutter 容器盒子模型的使用示例

    2023-06-18 18:47:43
  • asp之家 软件编程 m.aspxhome.com