[Mybatis]-[基础支持层]-类型转换处理-自定义typeHandler

it2023-02-07  46

该系列文章针对 Mybatis 3.5.1 版本

Mybatis 提供了很多内置的 TypeHandler ,几乎可以满足我们日常所需要的所有 Java类型到数据库类型的转换。

不过在某些特定的场景,有自定义 TypeHandler 的需求。

下面一个简单的案例,自定义一个 TypeHandler,并将其注册到 Mybatis 中的 TypeHandlerRegistry 容器中。

自定义 TypeHandler

自定义字符串类型处理器

step1、 自定义字符串类型处理器 MyStringTypeHandler

实现代码如下:

自定义 TypeHandler 需要实现 TypeHandler 或者继承抽象类 BaseTypeHandler

可选择性的将它映射到一个 JDBC 类型(不过该选择会覆盖该 JDBC 类型的所有操作)

step2、增加配置信息

在 mybatis-config.xml 中进行 typeHandler 的相关注册配置,如下图:

step3、使用

使用案例如下,

两种方式

一种是 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配置为主


文章实时更新、关注公众号

 

 

 

 

 

 

最新回复(0)