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提供了一个新的功能:的注解。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/226864.html原文链接:https://javaforall.cn
相关文章
- Data Access 之 MyBatis Plus(六)- ActiveRecord
- MyBatis配置中的#{}和${}有什么区别?
- Mybatis原理解析之一 SqlSessionFactory生产(源码解析)
- MyBatis-多表查询(一对多)
- MyBatis——【第二章】mybatis动态sql(分页)
- mybatis拦截器修改sql_javaweb拦截器是什么
- mybatis和hibernate的以及jpa区别_hibernate sql
- hibernate和mybatisplus区别_Mybatis框架
- MyBatis框架:第十一章:mybatis 逆向工程
- MyBatis框架:第二章:传统mybatis的hello world 示例
- mybatis中数据库的配置 (mysql8.0)
- 面试题:为什么说 Mybatis 是半自动ORM 映射工具?它与全自动的区别在哪里?
- MyBatis-Plus
- jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别详解数据库
- MyBatis学习总结(七)——Mybatis缓存详解编程语言
- mybatis 详解(八)—— 懒加载编程语言
- MyBatis trim标签
- MyBatis一对一关联查询
- MyBatis和Hibernate的区别
- Mybatis操作MySQL存储过程实现数据库交互(mybatis调用mysql存储过程)