Mybatis typeHandler
typeHandler作用将jdbcType和javaType的值做类型转换
环境
- spring boot
- mybatis 3
mybatis3与spring boot 集成请参考之前的文章
编写自己的typeHandler
实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler
更详细的介绍请参考官方地址
typeHandler实现类MyTypeHandler
package com.example.handler;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MyTypeHandler extends BaseTypeHandler<String> {
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i, "自定义类型处理器" + s);
}
@Override
public String getNullableResult(ResultSet resultSet, String s) throws SQLException {
return "自定义handler查询:"+resultSet.getString(s);
}
@Override
public String getNullableResult(ResultSet resultSet, int i) throws SQLException {
return null;
}
@Override
public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
return null;
}
}
springboot中注册自己的typeHandler实现类
mybatis:
type-handlers-package: com.example.handler
详细配置参考mybatis-spring-boot-autoconfigure官方地址
配置需要做转换处理的字段
<?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="com.example.mapper.TblUserMapper">
<resultMap id="BaseResultMap" type="com.example.model.TblUser">
<result column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" typeHandler="com.example.handler.MyTypeHandler"/>
<result column="password" jdbcType="VARCHAR" property="password" />
</resultMap>
<insert id="insert" parameterType="com.example.model.TblUser">
insert into tbl_user (id, name, password
)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR,typeHandler=com.example.handler.MyTypeHandler}, #{password,jdbcType=VARCHAR}
)
</insert>
<select id="selectAll" resultMap="BaseResultMap">
select id, name, password
from tbl_user
</select>
</mapper>