自定义TypeHandler分为三个步骤:

1、编写自定义TypeHandler,并继承自抽象类BaseTypeHandler<T>,实现抽象方法

2、在mybatis-config.xml配置文件的Configuration中注册自定义的TypeHandler

3、在Mapper.xml中使用自定义的TypeHandler

示例:

MyBooleanTypeHandler.java

public class MyBooleanTypeHandler extends BaseTypeHandler<Boolean> {
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i, String.valueOf(aBoolean));
} public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException {
String r = resultSet.getString(s);
if (r != null && !r.equals("")){
return Boolean.parseBoolean(r);
}
return null;
} public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException {
String r = resultSet.getString(i);
if (r != null && !r.equals("")){
return Boolean.parseBoolean(r);
}
return null;
} public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
String r = callableStatement.getString(i);
if (r != null && !r.equals("")){
return Boolean.parseBoolean(r);
}
return null;
}
}

Mybatis-config.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.properties"/> <typeAliases>
<package name="com.learn.pojo"/>
</typeAliases> <typeHandlers>
<typeHandler handler="com.learn.type.MyBooleanTypeHandler"/>
</typeHandlers> <environments default="dev">
<environment id="dev">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="Mapper/UserMapper.xml"/>
</mappers> </configuration>

UserMapper.xml

<insert id="addUser" parameterType="user">
insert into user (userName, password, isLogin)
values (#{userName}, #{password} #{isLogin, typeHandler=com.learn.type.MyBooleanTypeHandler});
</insert>

注册自定义TypeHandler有两种方法:

1、在mybatis-config.xml中配置

<typeHandlers>
<typeHandler handler="com.learn.type.MyBooleanTypeHandler" javaType="boolean" jdbcType="VARCHAR"/>
</typeHandlers>

2、使用注解配置

@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(java.lang.Boolean.class)
public class MyBooleanTypeHandler extends BaseTypeHandler<Boolean> {...}

使用自定义注解一般有两种方式:

1、

<insert id="addUser" parameterType="user">
insert into user (userName, password, isLogin)
values (#{userName}, #{password}, #{isLogin, typeHandler=com.learn.type.MyBooleanTypeHandler});
</insert>

2、

<insert id="addUser" parameterType="user">
insert into user (userName, password, isLogin)
values (#{userName}, #{password}, #{isLogin, javaType=java.lang.Boolean, jdbcType=VARCHAR});
</insert>
05-27 06:30