iBatis和MyBatis的区别

摘录自 https://blog.csdn.net/u012060033/article/details/108442434

1 ibatis基础

  • iBatis 是一个持久层框架。
  • 在Apache寄居六年之后,iBatis将代码托管到Google Code。于此同时,iBatis 更名为 MyBatis
  • MyBatis借助于JDK的泛型和注解特性进行了简化。

2 ibatis和mybatis区别

常用的Java EE框架,需要提供一个全局配置文件,用于指定程序运行所需的设置和参数信息。
而针对常用的持久层框架而言(Hibernate、JPA、iBatis 等),通常需要配置两类文件:

  • 一类用于指定数据源、事务属性以及其他一些参数配置信息(通常是一个独立的文件,可以称之为全局配置文件);
  • 另一类则用于指定数据库表和程序之间的映射信息(可能不止一个文件,称之为映射文件)。

MyBatis也不例外,虽然其中的一部分可以通过注解的形式进行,但是这两部分内容本身仍是必不可少的。

根据iBatis的习惯,我们通常把全局配置文件命名为 sqlMapConfig.xml,文件名本身并没有要求,
在 MyBatis中,也经常会将该文件命名为 Configuration.xml

(读完全文后也许会发现,在iBatis中经常出现的sqlMap在MyBatis中被逐渐淡化了,
除了此处,还比如iBatis配置文件的根元素为 ,指定映射文件的元素为 ,以及 SqlMapClient 等等,这个变化正说明,iBatis 仅是以 SQL 映射为核心的框架,
而在MyBatis中多以Mapper、Session、Configuration等其他常用ORM框架中的名字代替,体现的无非是两个方面:

  • 首先是为了减少开发者在切换框架所带来的学习成本;
  • 其次,MyBatis 充分吸收了其他ORM框架好的实践,MyBatis现在已不仅仅是一个SQL映射框架了)。

mybatis在全局配置文件中可以配置的信息主要包括如下几个方面:

properties — 用于提供一系列的键值对组成的属性信息,该属性信息可以用于整个配置文件中。
settings — 用于设置MyBatis的运行时方式,比如是否启用延迟加载等。
typeAliases — 为Java类型指定别名,可以在XML文件中用别名取代Java类的全限定名。
typeHandlers — 在MyBatis通过PreparedStatement为占位符设置值,或者从ResultSet取出值时,特定类型的类型处理器会被执行
objectFactory — MyBatis通过ObjectFactory来创建结果对象。可以通过继承DefaultObjectFactory来实现自己的ObjectFactory类。
plugins — 用于配置一系列拦截器,用于拦截映射SQL语句的执行。可以通过实现Interceptor接口来实现自己的拦截器。
environments — 用于配置数据源信息,包括连接池、事务属性等。
mappers — 程序中所有用到的SQL映射文件都在这里列出,这些映射SQL都被MyBatis管理

上面提及的大多数元素都不是必需的,通常MyBatis会为没有显式设置的元素提供缺省值。一个简单的全局配置文件示例如下:

2.1 配置文件区别

iBatis 和 MyBatis 的全局配置文件使用不同的 DTD 约束,在将应用由iBatis 升级至 MyBatis 时需要注意(两者的映射文件 DTD 约束也
不相同)

DTD(Document Type Definition,文档类型定义)是一种XML文件约束技术,它定义了XML文档的结构,包括元素的名称、子元素的名称及顺序、元素的属性等。通过使用DTD,可以确保XML文档的结构和内容符合预定义的格式,从而实现数据的一致性和准确性。

简单的全局配置文件示例

 <?xml version="1.0" encoding="UTF-8" ?>
 <!--iBatis 和 MyBatis 的全局配置文件使用不同的 DTD 约束,在将应用由iBatis 升级至 MyBatis 时需要注意(两者的映射文件 DTD 约束也不相同)-->
 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
 <configuration>
 <!-- 配置数据源相关的信息 -->
 <environments default="demo">
 <environment id="demo">
   <transactionManager type="JDBC"/>
   <dataSource type="POOLED">
     <property name="driver" value= … />
     <property name="url" value= … />
     <property name="username" value="root"/>
     <property name="password" value="root"/>
   </dataSource>
 </environment>
 </environments>
 <!-- 列出映射文件 -->
 <mappers>
   <mapper resource="footmark/mybatis/demo/UserInfoMapper.xml"/>
 </mappers>
 </configuration>

有了这些信息,MyBatis便能够和数据库建立连接,并应用给定的连接池信息和事务属性。MyBatis封装了这些操作,最终暴露一个 SqlSessionFactory实例供开发者使用,从名字可以看出来,这是一个创建SqlSession的工厂类,通过SqlSession实例,开发者能够直接进行业务逻辑的操作,而不需要重复编写JDBC相关的样板代码。根据全局配置文件生成SqlSession的代码如下:

Reader reader = Resources.getResourceAsReader("Configuration.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();

可以把上面的三行代码看做是MyBatis创建SqlSession的样板代码。其中第一行代码在类路径上加载配置文件,Resources 是MyBatis提供的一个工具类,它用于简化资源文件的加载,它可以访问各种路径的文件,不过最常用的还是示例中这种基于类路径的表示方式

2.2 属性设置区别

首先,两个版本的 DTD约束不同,MyBatis 的DTD文件已经包含在发布包下的 mybatis-3.0.x.jar包中。
这直接影响到的是,iBatis 配置文件的根元素是 ,而MyBatis使用的是
其次, 的用法发生了改变,之前的格式为:

  • 在iBatis中设置属性的方式
<settings props1="value1" props2="value2"… />

要设置的属性直接以键值对的形式作为 的属性

  • 在MyBatis中设置属性的方式
 <settings>
    <setting name="props1" value="value1"/>
    <setting name="props2" value="value2"/>
    ……
 </settings>

2.3 配置事务管理器和数据源区别

  • 在iBatis中配置事务管理器和数据源的方式
<transactionManager type="JDBC" >
    <dataSource type="SIMPLE">
       <property name="JDBC.Driver" value="${driver}"/>
       <!-- 其他数据源信息省略 -->
    </dataSource>
 </transactionManager>
  • 在MyBatis中配置事务管理器和数据源的方式
<environments default="demo">
 <environment id="demo">
 <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
       <property name="JDBC.Driver" value="${driver}"/>
       <!-- 其他数据源信息省略 -->
    </dataSource>
 </environment>
 </environments>

通过来进行数据源管理,主要是为了简化在多套数据源配置之间的切换,比如开发和发布使用不同的配置。

2.4 指定映射文件的方式区别

  • 在iBatis中指定映射文件的方式
<sqlMap resource=... />
 <sqlMap resource=... />
 <sqlMap resource=... />
  • 在 MyBatis中指定映射文件的方式
<mappers>
    <mapper resource=... />
    <mapper resource=... />
 </mappers>

上面的这些调整,主要出发点其实并不是使得MyBatis功能更为强大,而是使配置更为合理,让开发者更容易阅读和理解。
到目前为止,除了XML形式的全局配置,其实这也不是唯一选择,MyBatis还提供了通过代码来进行配置的方式:

posted @ 2025-04-18 23:50  kuki'  阅读(230)  评论(0)    收藏  举报