iBatis 框架的主要优势:
1、iBatis 封装了绝大多数的 JDBC 样板代码,使得开发者只需关注 SQL 本身,而不需要花费精力去处理例如注册驱动,创建 Connection,以及确保关闭 Connection 这样繁杂的代码。
2、从 iBatis 到 MyBatis,不只是名称上的变化,MyBatis 提供了更为强大的功能,同时并没有损失其易用性,相反,在很多地方都借助于 JDK 的泛型和注解特性进行了简化
常用的 Java EE 框架,应该都知道这些框架需要提供一个全局配置文件,用于指定程序正常运行所需的设置和参数信息。而针对常用的持久层框架而言(Hibernate、JPA、iBatis 等),则通常需要配置两类文件:
一类用于指定数据源、事务属性以及其他一些参数配置信息(通常是一个独立的文件,可以称之为全局配置文件);
另一类则用于指定数据库表和程序之间的映射信息(可能不止一个文件,我们称之为映射文件)。
MyBatis 也不例外,虽然其中的一部分可以通过注解的形式进行,但是这两部分内容本身仍是必不可少的
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 会为没有显式设置的元素提供缺省值。
iBatis 2.x 和 MyBatis 3.0.x 的区别
1、全局配置文件命名
iBatis 通常把为 sqlMapConfig.xml,文件名本身并没有要求,在 MyBatis 中经常会将该文件命名为 Configuration.xml
2、全局配置文件
<?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 提供的一个工具类,它用于简化资源文件的加载,它可以访问各种路径的文件,不过最常用的还是示例中这种基于类路径的表示方式
在完成全局配置文件,并通过 MyBatis 获得 SqlSession 对象之后,便可以执行数据访问操作了
---设置属性的区别
iBatis :<settings props1="value1" props2="value2"… />
MyBatis :<settings> <setting name="props1" value="value1"/> <setting name="props2" value="value2"/> …… </settings>
---配置事务管理器和数据源的区别
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>
通过 <environments> 来进行数据源管理,主要是为了简化在多套数据源配置之间的切换,比如开发和发布使用不同的配置。
3、在映射文件中配置 SQL 语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis.demo.UserInfoMapper">
<select id="selectUser" parameterType="int" resultType="mybatis.demo.UserInfo">
select * from UserInfo where userid =#{userid}
</select>
</mapper>
在 iBatis 中,namespace 不是必需的,且它的存在没有实际的意义。在 MyBatis 中,namespace 终于派上用场了,它使得映射文件与接口绑定变得非常自然
---指定映射文件的方式的区别
iBatis:<sqlMap resource=... /> <sqlMap resource=... /> <sqlMap resource=... />
MyBatis :<mappers> <mapper resource=... /> <mapper resource=... /> </mappers>
4、使用 SqlSession 执行映射文件中配置的 SQL 语句
try {
UserInfo userinfo = (UserInfo) sqlSession.selectOne ("mybatis.demo.UserInfoMapper.getUser", 2);
System.out.println(userinfo);
} finally {
sqlSession.close();
}
需要注意的是,SqlSession 的使用必需遵守上面的格式,即在 finally 块中将其关闭。以保证资源得到释放,防止出现内存泄露!
5、在 MyBatis 中使用代码进行配置
DataSource ds = …… // 获取一个 DataSource
TransactionFactory txFactory = new JdbcTransactionFactory();
Environment env = new Environment("demo", txFactory, ds);
Configuration cfg = new Configuration(env);
cfg.addMapper(UserInfoMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(cfg);
结合前面的配置文件,很容易理解这段代码的意思,故不再赘述。不过,需要注意的是 Configuration 的 addMapper() 方法,该方法的参数通常是一个接口,可以在接口里面定义若干方法,在方法上使用注解来指定映射的 SQL 语句。一个典型的接口定义以及对应的数据访问方法如下:
6、将映射的 SQL 语句与接口中的方法绑定
// 映射 SQL 绑定接口
public interface UserInfoMapper {
@Select("select * from userinfo where userid = #{userid}")
public UserInfo getUserInfo(int userid);
}
// 接口绑定对应的数据访问方法
try {
//UserInfo userinfo = (UserInfo) sqlSession.selectOne ("mybatis.demo.UserInfoMapper.selectUser", 2);
UserInfoMapper userinfoMapper = sqlSession.getMapper(UserInfoMapper.class);
UserInfo userinfo = userinfoMapper.getUserInfo(1);
System.out.println(userinfo);
} finally {
sqlSession.close();
}
7、MyBatis 映射文件的改变(仅仅是名称的改变,用法和含义并没有发生变化)
- 和全局配置文件一样,由于 DTD 约束发生变化,根元素也由原来的 <sqlMap> 调整为 <mapper>。
- <select> 等元素的 parameterClass 属性改为了 parameterType 属性。
- <select> 等元素的 resultClasss 属性改为了 resultType 属性。
- <parameterMap> 等元素的 class 属性改为了 type 属性。
- <result> 元素的 columnIndex 属性被移除了。
- 嵌套参数由 #value# 改为了 #{value}。
- <parameter> 等元素的 jdbcType 属性取值中,原来的 "ORACLECURSOR" 取值改为了现在的 "CURSOR","NUMBER" 取值改为了 "NUMERIC"。
iBatis/MyBatis 对存储过程的支持一直是值得称道的。之前通过使用 <procedure> 元素进行存储过程的定义,示例如下:
--- 存储过程的区别
iBatis:
<procedure id="getValues" parameterMap="getValuesPM">
{ ? = call pkgExample.getValues(p_id => ?) }
</procedure>
MyBatis :
<select id="getValues" parameterMap="getValuesPM" statementType="CALLABLE">
{ ? = call pkgExample.getValues(p_id => ?)}
</select>
通过 statementType 属性将该语句标识为存储过程而非普通 SQL 语句
8、代码层面的改变
MyBatis 在编码中的最大的改变就是将一个最常用的 API 由 SqlMapClient 改为了 SqlSessionFactory。
另外,类型处理器接口也由原来的 TypeHandlerCallback 改为了 TypeHandler。
最后 DataSourceFactory 也进行了调整,移动到 org.apache.ibatis.datasource 包下,其中的方法也作了微调。总之,代码层面公开的部分改动较少,不会给开发者造成较大的移植成本
相关推荐
与Ibatis Helper相比,Mybatis Generator提供了更多高级特性,例如自动添加主键生成策略、自定义模板支持、JavaBean规范遵循等。此外,它还支持多数据源配置,对于大型项目尤为实用。 这两款工具都遵循了Maven插件...
描述中的“一键转换,不用自己再手动替换标签”意味着这个工具可以自动化处理iBATIS与MyBatis之间的转换工作,减少了开发者手动修改大量代码的时间和精力。通常,这样的转换涉及到的主要任务包括: 1. **XML配置...
1. **API变更**:MyBatis的API与iBatis有所不同,比如SqlSession接口和Mapper接口的使用方式。开发者需要理解并适应这些变化。 2. **配置文件迁移**:iBatis使用的是`sqlMapConfig.xml`,而MyBatis使用`mybatis-...
Ibatis和Mybatis都是广泛使用的Java ORM(对象关系映射)框架,它们帮助开发者将数据库操作与业务逻辑解耦。本篇文章将探讨从ibatis2.x升级到mybatis3.x的过程,揭示其中的技术变迁和核心变化。 Ibatis2.x是一款轻...
可以帮你将 ibatis 2.x sqlmap 文件转换为 myBatis 3.x mapper 文件,该工具是使用了 Ant 构建任务进行 XSTL 转换和一些语法文字替换 该工具下载下来使用非常简单,把你要转换的所有 sqlmap 文件放到 source 文件夹...
在里面总结了ibatis和mybatis的主要区别,包括xml文件等
ibatis和mybatis对比
《Ibatis与Mybatis源码解析》 Ibatis和Mybatis是两个著名的Java持久层框架,它们在数据库操作中提供了高效、灵活的解决方案。本文将深入探讨这两个框架的源码,帮助开发者理解其内部机制,提升Java编程能力。 首先...
通过这个项目,初学者可以掌握Spring MVC的基本架构,理解iBatis或MyBatis如何处理SQL,以及如何利用JDBC与数据库进行通信。通过实践,开发者可以更好地理解这三个框架的优缺点,为日后的项目开发打下坚实的基础。
总的来说,这份资源对于学习和实践Ibatis与Mybatis的CRUD操作以及分页功能非常有价值。通过理解并掌握这些知识,开发者能够有效地管理数据库操作,提升应用的性能和用户体验。同时,提供的公司网站链接也为开发者...
在MyBatis中,配置文件的结构与iBatis有所不同。全局配置文件通常命名为`Configuration.xml`,而映射文件则定义了数据库表与Java对象之间的映射关系。全局配置文件中可以设置的内容包括: 1. `properties`:定义了...
整合iBatis或Mybatis与Spring的核心在于,Spring可以管理这些数据访问组件的生命周期,并通过其IoC容器进行依赖注入。这样,你可以在Spring配置文件中定义数据源、事务管理器,以及SqlSessionFactory或...
iBatis和MyBatis是两个非常流行的Java持久层框架,它们在数据库操作中提供了强大的支持,极大地简化了数据访问层(DAO)的实现。这篇教程将深入介绍这两个框架的核心概念、功能以及如何进行实际应用。 首先,iBatis...
`iBatis` 提供了一种将SQL语句与Java代码解耦的方法,通过XML或注解来配置和映射原生信息,使开发者能够编写动态、灵活的SQL。 `MyBatis` 是 `iBatis` 的后续版本,由社区发展而来。它进一步简化了数据库操作,增强...
### myBatis与ibatis的区别 #### 一、概述 myBatis与ibatis是两款在Java领域中非常流行的持久层框架,它们均基于SQL映射机制,为开发者提供了便捷的方式来处理数据库操作。两者间的关系密切,ibatis是myBatis的...
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 ...
3. **iBATIS(MyBatis)**:iBATIS是数据访问层的一个框架,它简化了SQL操作,将SQL语句与Java代码分离。MyBatis3已经替代了iBATIS,但在很多老项目中仍然能看到iBATIS的身影。它允许开发者编写动态SQL,通过映射...
总之,MybatisLink是一款强大的Eclipse插件,为使用MyBatis或iBatis的开发人员提供了便利,使得在Java接口与XML映射文件之间的跳转变得轻而易举,极大地提高了开发效率。通过合理利用这样的工具,可以更好地管理和...
MyBatis,原名iBatis,是一款优秀的Java持久层框架,它主要解决了在Java开发中数据访问层的繁琐工作,使得开发者可以更加专注于业务逻辑的实现。本学习工程是针对MyBatis进行深入理解与实践的一个绝佳示例,特别适合...
### ibatis与mybatis的发展历程及技术要点 #### 一、ibatis的起源与功能特点 ibatis作为一款开源的Java持久层框架,在其诞生之初便致力于解决Java应用程序中的数据库操作问题。它通过将SQL语句封装在XML配置文件中...