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配置文件的根元素为
而在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 配置文件的根元素是
其次,
- 在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还提供了通过代码来进行配置的方式:

浙公网安备 33010602011771号