“ 在MyBatis中,提供了一系列的类型转换器(TypeHandler),每当MyBatis设置参数到PreparedStatement 或者从ResultSet 结果集中取得值时,就会使用TypeHandler 来处理数据库类型与java 类型之间转换。”
在MyBatis中的org.apache.ibatis.type.TypeHandlerRegistry中定义了一些列Java类型和数据库类型的转换器,如下图所示。

在实际场景下,比如我们POJO对象中属性为Boolean类型,数据库只能存储数值类型 ,此时需要我们自定义一个类型转换器。
01
—
自定义转换器
我们以POJO对象中的某属性为Boolean类型,而存储数据库是NUMERIC类型,我们来实现自定义的类型转换器MyTypeHandler。
首先,需要实现TypeHandler接口,实现其中的4个方法。

这几个方法中,setParameter 方法用于将POJO对象中的特定属性转换成数据库中某种属性,本案例中就是将Boolean转换成int型写入数据库。
而getResult 方法则是将数据库中取到的结果转换成POJO对象中的指定(比如本案例Boolean)属性。
完成了特殊类型转换器的实现,我们只需要在核心配置文件中进行配置注册即可。如下所示。

02
—
测试
首先我们先看一下我们的POJO 对象,本次是修改了dept 部门的对象和数据库表字段。

再来配置一下DeptMapper.xml 映射文件,这里我们插入一条数据。

接着编写接口函数,接口函数名就是上面配置的insert 标签中的id,如下所示。

最后,看一下测试内容和结果。

测试结果为:

03
—
总结
总的来说自定义类型转换器只要实现TypeHandler 接口,然后在核心配置文件中进行配置注册即可。当对象转换的时候遇到这种场景,则自动调用注册好的类型转换器进行转换。
除此以外,MyBatis 中还为我们准备了枚举类型转换器EnumTypeHandler
等基本的TypeHandler。




