功能

将数据库类型(jdbcType)和Java类型(javaType)互相转换

自动转换

基础类型MyBatis会自动识别并完成转换

常见的booleanbyteintDateTimestamp及部分数组等都支持自动转换

详见 https://mybatis.org/mybatis-3/zh/configuration.html#typeHandlers

使用

转换器的底层是BaseTypeHandler<T>(继承自TypeHanlder<T>接口),默认T为参数类型

指定转换器

可通过指定Java类型或jdbc类型设置

设置java类型

设置javaType为指定对应的实体属性类型,不设置时自动判断

e.g.
1
<result column="request_url" property="requestUrl" javaType="java.lang.String"/>

数据库列request_url(类型为jdbcType.VARCHAR),对应的实体属性为requestUrl(类型为String),将使用StringTypeHandler

或者在TypeHandler添加注解@MappedTypes(java类型),表示所有该jdbcType类型均使用该TypeHandler,需要在配置文件中通过typeHandlers引入该转换器

自定义类型转换器
1
2
3
4
5
//自定义String类型转换器
@MappedTypes(String.class)
public class MyStringTypeHandler implements TypeHandler<String>{

}
引入转换器
1
2
3
4
<!--引入转换器-->
<typeHandlers>
<typeHandler handler="net.nmtsoft.MyStringTypeHandler"/>
</typeHandlers>

则所有javaType="java.lang.String"的字段将使用该转换器

1
<result column="request_url" javaType="java.lang.String"  property="requestUrl"/>

将使用MyStringTypeHandler

javaTypeMappedTypes均设置了,则以javaType为准

设置jdbc类型

同设置java类型

  • 设置jdbcType指定该字段的数据库类型
  • 或者在typeHandler添加注解@MappedJdbcTypes(JdbcTypes)
  • 均设置时,以jdbcType为准

SQL参数指定转换

在参数后可跟typeHandler属性指定,详见参数映射

#{param, typeHandler=转换器}

e.g.
1
insert into user(id, name) values (#{id},#{name,typeHandler=net.nmtsoft.MyStringTypeHandler})