持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
类型处理器的作用
类型处理器,简单地理解,就是用于处理 JDBC 类型
与 Java 类型
相互间的转换。MyBatis 在设置预处理语句(PreparedStatement
)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型
。
类型处理器与 JDBC 类型
、Java 类型
之间的对应关系请参见官网。
怎样自定义类型处理器?
MyBatis 中内置了很多 TypeHandler,例如StringTypeHandler
用于java.lang.String
类型和 JDBC 中的CHAR
、VARCHAR
、LONGVARCHAR
、NCHAR
、NVARCHAR
、LONGNVARCHAR
等类型之间的转换。
如果要处理 MyBatis 不支持的或非标准的类型,通常需要我们创建自己的类型处理器。创建自定义类型处理器的方式有两种:
(一)、实现org.apache.ibatis.type.TypeHandler
接口;
(二)、继承org.apache.ibatis.type.BaseTypeHandler
。
BaseTypeHandler
类实现了TypeHandler
接口,对调用 setParameter()
方法,参数为Null
的情况做了通用的处理。对调用getResult()
方法,从ResultSet
对象或存储过程调用结果中获取列的值出现的异常做了处理。因此,自定义类型处理器,方式(二)更方便一些。
TypeHandler
接口定义如下:
MyBatis
通过TypeHandlerRegistry
建立JDBC 类型
、Java 类型
与TypeHandler
之间的映射关系。
在TypeHandlerRegistry
中,通过 Map 对象保存 JDBC 类型
、Java 类型
与TypeHandler
之间的关系。
在TypeHandlerRegistry
类的构造方法中,通过register()
方法注册所有的TypeHandler
:
定义好类型处理器后,需要在 MyBatis 的配置文件中配置下我们自定义的类型处理器,配置完成后,我们自定义的类型处理器就完成啦。
<!-- mybatis-config.xml -->
<typeHandlers>
<typeHandler handler="com.jasmine.mybatis.CustomTypeHandler"/>
</typeHandlers>