mybatis启动过程分析 typehandler

本节介绍typehandler的解析,在mybatis中typehandler主要是用于类型转换的比如数据库中是varchar2而Java bean中是string 或者 integer等,需要使用typehandler,typehander的解析使用如下的方法
在这里插入图片描述
配置typehander可以使用package包扫描的方式也可以挨个配置

<configuration>
    <typeHandlers>
      <!-- 
          当配置package的时候,mybatis会去配置的package扫描TypeHandler
          <package name="com.dy.demo"/>
       -->
      
      <!-- handler属性直接配置我们要指定的TypeHandler -->
      <typeHandler handler=""/>
      
      <!-- javaType 配置java类型,例如String, 如果配上javaType, 那么指定的typeHandler就只作用于指定的类型 -->
      <typeHandler javaType="" handler=""/>
      
      <!-- jdbcType 配置数据库基本数据类型,例如varchar, 如果配上jdbcType, 那么指定的typeHandler就只作用于指定的类型  -->
      <typeHandler jdbcType="" handler=""/>
      
      <!-- 也可两者都配置 -->
      <typeHandler javaType="" jdbcType="" handler=""/>
      
  </typeHandlers>
  
  ......
  
</configuration>

如果配置类package会用typeHandlerRegistry这个类来注册,原理和typealise相似
在这里插入图片描述
在这里插入图片描述
接着再看register方法,在看之前先了解两个注解MappedJdbcTypes这个注解如果放在typehandler实现类上就是标记当前的typejhandler可以处理哪个jdbc。所有可处理的jdbc类型的枚举都在这里
在这里插入图片描述
在看register方法
在这里插入图片描述

在这里插入图片描述

看getInstance方法
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这最后一个方法就没什么好说的了,容器主要是map,看看
在这里插入图片描述
第一个map是jdbc为key,value是typehandler实例,第二个map是javatype为key,value是第一个map,第三个map是没有jdbcType和javaType的typehandler,第四个map是所有的typehandler ,第五个是只有jdbctype但不知道javatype的map。
以上都是配置包名扫描。也可以直接配置,类似于这样,当然了如果你只配置了jdbctype会在程序中查找MappedType注解并且由此注解获取处理的JavaType。

猜你喜欢

转载自blog.csdn.net/zhenghuangyu/article/details/85226035