随着开发团队转投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的规范。大数据量时会出现性能问题,要想实现物理分页还得自己想办法改了。
分享到:
相关推荐
在事务管理方面,Mybatis3.x与Spring的集成更加紧密,可以利用Spring的事务管理功能,实现声明式事务,提升了事务处理的规范性和可维护性。此外,3.x版本还支持使用ExecutorType执行器类型,如SIMPLE、REUSE和BATCH...
MyBatisCodeHelper-Pro是一款专为IntelliJ IDEA 2020.3.X版本设计的高效Mybatis代码生成插件。这款插件极大地提升了开发人员在使用Mybatis框架时的生产力,通过自动生成常见的Mapper接口、XML配置文件、Service以及...
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 ...
在2.x版本中,Ibatis主要帮助开发者将SQL语句与Java代码分离,提供了一种灵活的数据库访问方式,避免了传统的JDBC代码编写中的大量模板代码。本实战将深入探讨Ibatis2.x的核心功能和使用技巧。 一、Ibatis简介 ...
2. **配置文件迁移**:iBatis使用的是`sqlMapConfig.xml`,而MyBatis使用`mybatis-config.xml`作为全局配置文件。需要将原有的配置项迁移到新的格式中。 3. **映射文件转换**:iBatis的映射文件是`*.xml`,MyBatis...
在MyBatis中配置二级缓存,我们需要编写一个自定义的Cache实现类,该类继承自`org.apache.ibatis.cache.Cache`接口。这里我们将使用RedisTemplate来存储和检索缓存数据: ```java import org.apache.ibatis....
iBatis 2.X 是一款流行的数据...这是一个很好的起点,让你能够熟练地运用iBatis进行数据访问,并为后续的MyBatis 3.X或其他ORM框架的学习打下基础。在实践中不断探索和积累经验,你将能更深入地理解和应用这些技术。
【标题】"ibatis2.3.X培训PPT"涵盖了关于MyBatis(原名iBatis)2.3.x版本的核心概念与实践应用。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。本培训材料主要针对初学者和有一定经验的...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责简化数据库操作,将SQL语句与Java代码分离,使得开发人员能够更加专注于业务逻辑。在本主题中,我们将深入探讨Ibatis的两个特定版本:ibatis2.3.4.8....
可以帮你将 ibatis 2.x sqlmap 文件转换为 myBatis 3.x mapper 文件,该工具是使用了 Ant 构建任务进行 XSTL 转换和一些语法文字替换 该工具下载下来使用非常简单,把你要转换的所有 sqlmap 文件放到 source 文件夹...
标题“ibatis2mybatis-master.zip”所指的是一款工具或服务,用于将基于iBATIS的数据访问框架的代码自动转换为使用MyBatis框架的代码。iBATIS和MyBatis都是Java开发中常用的持久层框架,它们帮助开发者简化数据库...
`org.apache.ibatis.annotations.Param`是MyBatis中的一个重要注解,用于处理方法参数映射。 `@Param`注解主要用于SQL查询中的动态参数绑定,尤其是在动态SQL语句中。在MyBatis的映射文件或者Mapper接口中,当我们...
3. **事务支持**:与IBatis.DataMapper协同工作,提供了高级的事务控制功能,可以跨越多个数据库操作。 4. **性能优化**:通过延迟加载(Lazy Loading)和预加载(Eager Loading)策略,优化数据加载性能。 5. **...
iBatis 2.3.5是其在2.x系列中的一个重要版本,具备稳定性高、灵活性强等特点。 二、iBatis设计哲学 1. SQL语句的动态性:iBatis允许开发者在XML配置文件中编写动态SQL,使得SQL可以根据业务逻辑的变化灵活调整。 2...
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分页”指的是在Spring 3.0.3版本与iBATIS 2.3.4.7版本结合下实现的一种分页功能。这是一个常见的Java Web开发场景,其中Spring作为依赖注入和框架管理工具,iBATIS作为数据访问...
《MyBatis 3 用户指南 中文版》 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使你更好地将注意力...
Spring3 整合 MyBatis3 配置多数据源动态选择 SqlSessionFactory 详细教程 本教程主要介绍了 Spring3 整合 MyBatis3 配置多数据源动态选择 SqlSessionFactory 的详细教程。下面将详细介绍如何实现 Spring 整合 ...
随着时间的推移,Mybatis(iBatis 的后续版本,目前是 3.x 版本)成为更广泛采用的选择,因为它提供了更丰富的功能和更简洁的 API 设计。`ibatis2mybatisConverter` 是一个工具,旨在帮助开发者将 iBatis 2 的 ...