Mybatis源码解读 | 类型处理器

147 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

类型处理器的作用

类型处理器,简单地理解,就是用于处理 JDBC 类型Java 类型相互间的转换。MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型

类型处理器与 JDBC 类型Java 类型之间的对应关系请参见官网

怎样自定义类型处理器?

MyBatis 中内置了很多 TypeHandler,例如StringTypeHandler用于java.lang.String类型和 JDBC 中的CHARVARCHARLONGVARCHARNCHARNVARCHARLONGNVARCHAR等类型之间的转换。

如果要处理 MyBatis 不支持的或非标准的类型,通常需要我们创建自己的类型处理器。创建自定义类型处理器的方式有两种:

(一)、实现org.apache.ibatis.type.TypeHandler接口;

(二)、继承org.apache.ibatis.type.BaseTypeHandler

BaseTypeHandler类实现了TypeHandler接口,对调用 setParameter() 方法,参数为Null的情况做了通用的处理。对调用getResult()方法,从ResultSet对象或存储过程调用结果中获取列的值出现的异常做了处理。因此,自定义类型处理器,方式(二)更方便一些。

TypeHandler接口定义如下:

image.png

MyBatis通过TypeHandlerRegistry建立JDBC 类型Java 类型TypeHandler之间的映射关系。

TypeHandlerRegistry中,通过 Map 对象保存 JDBC 类型Java 类型TypeHandler之间的关系。

carbo(1)n.png

TypeHandlerRegistry类的构造方法中,通过register()方法注册所有的TypeHandler

image.png

定义好类型处理器后,需要在 MyBatis 的配置文件中配置下我们自定义的类型处理器,配置完成后,我们自定义的类型处理器就完成啦。

<!-- mybatis-config.xml -->
<typeHandlers>
  <typeHandler handler="com.jasmine.mybatis.CustomTypeHandler"/>
</typeHandlers>