该系列文章针对 Mybatis 3.5.1 版本
Mybatis 提供了很多内置的 TypeHandler ,几乎可以满足我们日常所需要的所有 Java类型到数据库类型的转换。
不过在某些特定的场景,有自定义 TypeHandler 的需求。
下面一个简单的案例,自定义一个 TypeHandler,并将其注册到 Mybatis 中的 TypeHandlerRegistry 容器中。
自定义字符串类型处理器
实现代码如下:
自定义 TypeHandler 需要实现 TypeHandler 或者继承抽象类 BaseTypeHandler
可选择性的将它映射到一个 JDBC 类型(不过该选择会覆盖该 JDBC 类型的所有操作)
在 mybatis-config.xml 中进行 typeHandler 的相关注册配置,如下图:
使用案例如下,
两种方式
一种是 PrepareStatement 设置参数时 javaType 到 jdbcType 的类型转换
一种是 ResultMap 结果集映射时,jdbcType 到 javaType 的类型转换
小贴士:
上述代码自定义 TypeHandler 没有显示指定 jdbcType ,所以Mybatis框架默认不会使用该 typeHandler 来进行处理,只有显示使用,比如:在 resultMap 结果集映射上标注,或者 sql 执行时标注。 这样子的好处,就是自定义的 typeHandler 不会影响到现有代码的执行,该 typeHandler 可以按需使用。
当然,如果想让自定的 typeHandler 覆盖原有 jdbcType 类型作为全局的 typeHandler 可以给自定义的 typeHandler 指定 jdbcType,有两种指定方式 1、在自定义 typeHandler 类上,使用 @MappedJdbcTypes(value = JdbcType.VARCHAR) 注解标注 2、在 mybatis-config.xml 配置文件配置时 <typeHandler> 是指定 jdbcType 属性,如:<typeHandler handler="xxx" jdbcType="VARCHAR"> 当注解和xml配置同时存在时,以xml配置为主
文章实时更新、关注公众号