Java笔记:ibatis升级mybatis

背景
iBatis2.x框架已经不再维护,被谷歌托管后,将iBatis3.x改名为MyBatis3,而MyBatis提供了更加丰富的功能。
对于一些早期搭建开发仍在使用的项目来说,将iBatis升级到MyBatis显得十分有必要,可以极大地提供工作效率,降低繁琐但重要的持久层开发成本。

具体升级步骤
注:一般而言,需要框架升级的当前项目应用都是正在投产使用,重新开发底层sql映射文件工作量庞大且风险高,因此在原有的基础上进行升级即可。
这里推荐一个将iBatis 2.x sqlmap文件转换为MyBatis 3.x xml mapper文件的转换工具,Github地址:https://github.com/mybatis/ibatis2mybatis

一、 添加mybatis的jar依赖
在项目应用的pom.xml文件中,添加如下配置:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.5</version>
 </dependency>
 
 <!-- 与spring集成使用时添加 -->
 <dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.3.2</version>
 </dependency>

与此同时,删除ibatis相关jar包:ibatis-sqlmap-x.x.x.jar、spring-orm-x.x.x.jar

二、 添加mybatis的相关配置文件
1.主配置文件sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<properties resource="jdbc_mysql.properties" />
	<!-- 定义类型名 -->
	<typeAliases>
		<package name="org.xxx.com.dal.dataobject" />
	</typeAliases>
	<!-- 注册映射文件 -->
	<mappers>
		<mapper resource="sqlMap/xxx-mapper.xml" />
	</mappers>
</configuration>

注:在主配置文件中,属性properties、运行时行为settings(可扩增)、类型转换器typeHandlers、别名typeAliases、插件plugins(不优先考虑)、环境属性environments等可按需添加
详见官网链接:https://mybatis.org/mybatis-3/zh/configuration.html

2.接口映射文件xxxMapper.xml
使用新的DTD:

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

mapper.xml中注意点:
1)namespace为DAO接口的类全路径
2)statement的id、parameterType、resultType尽量与mapper.java中方法名、输入参数类型、输出参数类型一致
3)根元素从sqlMap变成mapper
4)class属性通常变更为type
5)parameterClass属性通常变更为parameterType
6)resultClass属性通常变更为resultType、resultMap
7)mybatis不支持bigint unsigned(–> bigint)、int(–>integer)、datatime(–>timestamp)、text(–>clob)等类型
8)mybatis使用占位符#{}、拼接符${},不再支持#字段名#,否则提示sql语法错误
9)groupBy、nullValue、isNotEmpty等属性已经被废弃。

3.数据源配置更新
spring上下文更新配置如下:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!-- 加载db.properties文件中的内容,db.properties文件中key命名要有一定的特殊规则 -->
    <context:property-placeholder location="classpath:db.properties" />
    <!-- 配置数据源 ,dbcp -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="30" />
        <property name="maxIdle" value="5" />
    </bean>

    <!-- 从整合包里找,org.mybatis:mybatis-spring:1.3.2 -->
    <!-- sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加载mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
    </bean>
    <!-- mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
        <property name="basePackage" value="com.iot.learnssm.firstssm.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
       <!-- <property name="sqlSessionFactory" ref="sqlSessionFactory" />
       会导致数据源配置不管用,数据库连接不上。且spring 4弃用
       -->
    </bean>

参考学习链接:https://blog.csdn.net/h3243212/article/details/50837878

三、 DAO接口代码更新
尽量不改动原工程结构,根据项目实际情况升级。
若原ibatis系统使用SqlMapClinetDaoSupport的getSqlMapClientTemplate()方法进行CRUD,则升级使用SqlMapClinetDaoSupport的getSqlSession()方法进行CRUD操作。其中queryForObject() --> selectOne(),queryForList() --> selectList()。

四、使用代码生成器
使用代码生成器可自动生成对应的实体类、Mapper接口和Mapper.xml映射文件,避免新建每张表都手动编写这些代码,可节省更多时间去开发核心或业务应用层代码。当然,若是需要用到联合查询和存储过程等,还是需要手动调整。
对于新增的表,将不再采用原来的编写DAO接口及实现类的方式,通过引入生成器mybatisGenerator,使用Mapper代理开发的方式,只编写Mapper接口(原DAO接口)即可。

采用Maven插件方式的生成步骤:
1.在mybatisGenerator路径下的generatorConfig.xml中添加新增表的

标签,指定对应实体类名称

<table tableName="app_user_config" domainObjectName="AppUserConfig"></table>

2.在IDEA的Maven Projects中找到数据访问层路径下的mybatis-generator,双击命令mybatis-generator:generate,待控制台出现BUILD SUCCESS字样即表示生成成功。
3.在spring配置文件中,添加mapper接口bean定义
4.在sqlMapConfig.xml文件中添加Mapper映射文件配置

<mapper resource="sqlMap/AppUserConfigMapper.xml" />

五、mybatis源码下载及构建
git clone https://github.com/mybatis/mybatis-3.git
cd mybatis-3
mvn -version3.5.3
jdk8
mvn clean install -Dmaven.test.skip=true

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值