`
eric_hwp
  • 浏览: 125274 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ibatis2.x与mybatis(ibatis3.x)的比较

 
阅读更多
随着开发团队转投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的分页继续沿用ibatis2.x的逻辑分页方式,依赖于JDBC的规范。大数据量时会出现性能问题,要想实现物理分页还得自己想办法改了。
分享到:
评论

相关推荐

    ibatis2.X升级mybatis3.X之曲径通幽处

    在事务管理方面,Mybatis3.x与Spring的集成更加紧密,可以利用Spring的事务管理功能,实现声明式事务,提升了事务处理的规范性和可维护性。此外,3.x版本还支持使用ExecutorType执行器类型,如SIMPLE、REUSE和BATCH...

    适用于IDEA2020.3.X的Mybatis生成插件

    MyBatisCodeHelper-Pro是一款专为IntelliJ IDEA 2020.3.X版本设计的高效Mybatis代码生成插件。这款插件极大地提升了开发人员在使用Mybatis框架时的生产力,通过自动生成常见的Mapper接口、XML配置文件、Service以及...

    ibatis、mybatis官方教程文档集合(含Manning.iBATIS.in.Action)

    Manning.iBATIS.in.Action.Jan.2007.eBook-BBL.pdf MyBatis 3 User Guide Simplified Chinese.pdf MyBatis-3.0.3-Migrations.pdf MyBatis-3.0.3-User-Guide.pdf MyBatis-3-Migrations.doc MyBatis-3-Migrations.pdf ...

    Ibatis2.x学习实战

    在2.x版本中,Ibatis主要帮助开发者将SQL语句与Java代码分离,提供了一种灵活的数据库访问方式,避免了传统的JDBC代码编写中的大量模板代码。本实战将深入探讨Ibatis2.x的核心功能和使用技巧。 一、Ibatis简介 ...

    从iBatis迁移到MyBatis

    2. **配置文件迁移**:iBatis使用的是`sqlMapConfig.xml`,而MyBatis使用`mybatis-config.xml`作为全局配置文件。需要将原有的配置项迁移到新的格式中。 3. **映射文件转换**:iBatis的映射文件是`*.xml`,MyBatis...

    springboot2.x整合redis做mybatis的二级缓存

    在MyBatis中配置二级缓存,我们需要编写一个自定义的Cache实现类,该类继承自`org.apache.ibatis.cache.Cache`接口。这里我们将使用RedisTemplate来存储和检索缓存数据: ```java import org.apache.ibatis....

    iBatis2.X入门附带完整项目

    iBatis 2.X 是一款流行的数据...这是一个很好的起点,让你能够熟练地运用iBatis进行数据访问,并为后续的MyBatis 3.X或其他ORM框架的学习打下基础。在实践中不断探索和积累经验,你将能更深入地理解和应用这些技术。

    ibatis2.3.X培训PPT

    【标题】"ibatis2.3.X培训PPT"涵盖了关于MyBatis(原名iBatis)2.3.x版本的核心概念与实践应用。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。本培训材料主要针对初学者和有一定经验的...

    ibatis2.3.4.8.jar 和 ibatis-2.3.4.726.jar两个版本的下载

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责简化数据库操作,将SQL语句与Java代码分离,使得开发人员能够更加专注于业务逻辑。在本主题中,我们将深入探讨Ibatis的两个特定版本:ibatis2.3.4.8....

    ibatis2mybatis-master

    可以帮你将 ibatis 2.x sqlmap 文件转换为 myBatis 3.x mapper 文件,该工具是使用了 Ant 构建任务进行 XSTL 转换和一些语法文字替换 该工具下载下来使用非常简单,把你要转换的所有 sqlmap 文件放到 source 文件夹...

    ibatis2mybatis-master.zip

    标题“ibatis2mybatis-master.zip”所指的是一款工具或服务,用于将基于iBATIS的数据访问框架的代码自动转换为使用MyBatis框架的代码。iBATIS和MyBatis都是Java开发中常用的持久层框架,它们帮助开发者简化数据库...

    ibatis-core-3.0.jar org.apache.ibatis.annotations.Param

    `org.apache.ibatis.annotations.Param`是MyBatis中的一个重要注解,用于处理方法参数映射。 `@Param`注解主要用于SQL查询中的动态参数绑定,尤其是在动态SQL语句中。在MyBatis的映射文件或者Mapper接口中,当我们...

    IBatis.net-IBatis.DataAccess.1.9.2/IBatis.DataMapper.1.6.2

    3. **事务支持**:与IBatis.DataMapper协同工作,提供了高级的事务控制功能,可以跨越多个数据库操作。 4. **性能优化**:通过延迟加载(Lazy Loading)和预加载(Eager Loading)策略,优化数据加载性能。 5. **...

    ibatis-2-mybatis-2.3.5.zip

    iBatis 2.3.5是其在2.x系列中的一个重要版本,具备稳定性高、灵活性强等特点。 二、iBatis设计哲学 1. SQL语句的动态性:iBatis允许开发者在XML配置文件中编写动态SQL,使得SQL可以根据业务逻辑的变化灵活调整。 2...

    mybatis源码中文注释.zip

    org.apache.ibatis.logging.log4j2 org.apache.ibatis.logging.nologging org.apache.ibatis.logging.slf4j org.apache.ibatis.logging.stdout 对象适配器设计模式 2.异常 org.apache.ibatis.exceptions 3.缓存 ...

    spring3.0.3+ibatis2.3.4.7分页

    标题中的“spring3.0.3+ibatis2.3.4.7分页”指的是在Spring 3.0.3版本与iBATIS 2.3.4.7版本结合下实现的一种分页功能。这是一个常见的Java Web开发场景,其中Spring作为依赖注入和框架管理工具,iBATIS作为数据访问...

    MyBatis-Simplified-Chinese.rar_ mybatis-3_Mybatis-spring_mybatis

    《MyBatis 3 用户指南 中文版》 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使你更好地将注意力...

    Spring3 整合MyBatis3 配置多数据源动态选择SqlSessionFactory详细教程

    Spring3 整合 MyBatis3 配置多数据源动态选择 SqlSessionFactory 详细教程 本教程主要介绍了 Spring3 整合 MyBatis3 配置多数据源动态选择 SqlSessionFactory 的详细教程。下面将详细介绍如何实现 Spring 整合 ...

    ibatis2mybatisConverter:将 sqlMap xmls 从 iBatis 2 迁移到 Mybatis 3

    随着时间的推移,Mybatis(iBatis 的后续版本,目前是 3.x 版本)成为更广泛采用的选择,因为它提供了更丰富的功能和更简洁的 API 设计。`ibatis2mybatisConverter` 是一个工具,旨在帮助开发者将 iBatis 2 的 ...

Global site tag (gtag.js) - Google Analytics