注:本文转载自南轲梦
上篇文章《深入浅出Mybatis系列(四)—配置详解之typeAliases别名(mybatis源码篇)》为大家介绍了mybatis中别名的使用,以及其源码。本篇将为大家介绍TypeHandler, 并简单分析其源码。
Mybatis中的TypeHandler是什么?
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型。Mybatis默认为我们实现了许多TypeHandler, 当我们没有配置指定TypeHandler时,Mybatis会根据参数或者返回结果的不同,默认为我们选择合适的TypeHandler处理。
那么,Mybatis为我们实现了哪些TypeHandler呢? 我们怎么自定义实现一个TypeHandler ? 这些都会在接下来的mybatis的源码中看到。
在看源码之前,还是像之前一样,先看看怎么配置吧?
配置TypeHandler
1 | <configuration> |
上面简单介绍了一下TypeHandler, 下面就看看mybatis中TypeHandler的源码了。
老规矩,先从对xml的解析讲起:
typeHandlers节点源码
1 | /** |
接下来看看TypeHandler的管理注册类:
TypeHandlerRegistry源码
1 | /** |
由源码可以看到, mybatis为我们实现了那么多TypeHandler, 随便打开一个TypeHandler,看其源码,都可以看到,它继承自一个抽象类:BaseTypeHandler, 那么我们是不是也能通过继承BaseTypeHandler,从而实现自定义的TypeHandler ? 答案是肯定的, 那么现在下面就为大家演示一下自定义TypeHandler:
自定义TypeHandler
1 | (JdbcType.VARCHAR) |
然后,就该配置我们的自定义TypeHandler了:1
2
3
4
5
6
7
8
9
10
11<configuration>
<typeHandlers>
<!--
由于自定义的TypeHandler在定义时已经通过注解指定了jdbcType, 所以此处不用再配置jdbcType
-->
<typeHandler handler="ExampleTypeHandler"/>
</typeHandlers>
......
</configuration>
也就是说,我们在自定义TypeHandler的时候,可以在TypeHandler通过@MappedJdbcTypes指定jdbcType, 通过 @MappedTypes 指定javaType, 如果没有使用注解指定,那么我们就需要在配置文件中配置。
好啦,本篇文章到此结束。