Mybatis 自定义类型转换器

本文详细介绍了MyBatis中的类型转换器(BaseTypeHandler)及其注册与使用流程。包括自定义类型转换器的方法,注册过程中的注意事项,以及如何通过mapper文件指定使用的转换器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类型转换器

1. 简介

org.apache.ibatis.type.BaseTypeHandler
部分实现类
如上图,是mybatis自带的部分类型转换器,基本全部覆盖了java常用类型。

2. 自定义类型转换器

参考官网示例即可

3 流程分析

3.1 注册类型转换器

注册关键源码如下,类型转换器被存储在Map中

  private void register(Type javaType, JdbcType jdbcType, TypeHandler<?> handler) {
    if (javaType != null) {
      Map<JdbcType, TypeHandler<?>> map = typeHandlerMap.get(javaType);
      if (map == null || map == NULL_TYPE_HANDLER_MAP) {
        map = new HashMap<>();
      }
      map.put(jdbcType, handler);
      typeHandlerMap.put(javaType, map);
    }
    allTypeHandlersMap.put(handler.getClass(), handler);
  }

Mybatis大致注册TypeHandler流程如下:
在这里插入图片描述
根据流程我们得出:

  • Mybatis类型转换器存储在Map中
  • 同类型的转换器,后注册的会覆盖之前注册的
  • 包扫描方式注册的类型转换器无法保证注册顺序,即如果声明了多个相同类型的转换器,无法确定Mybatis最后注册哪一个
  • 使用注解方式声明的类型转换器,由于是根据注册顺序来注册的,所以可以使用@Order注解来指定最后注册的那一个转换器

3.2 使用类型转换器
在这里插入图片描述

由上图流程可知,如果不确定Mybatis最后一个注册并生效的类型转换器是哪一个,可以通过mapper文件typeHandler属性,手动指定要使用的转换器。

结论:

  1. Mybatis首先注册自带的类型转换器
  2. 然后扫描配置的 mybatis.type-handlers-package 属性下的转换器并注册(无序)
  3. 然后扫描并注册BeanFactory中的类型转换器(类加载顺序,可通过@Order来指定顺序)
  4. 可以在mapper文件中,通过typeHandler属性来指定要使用的typeHandler
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值