【MyBatis】源码学习 03 – 类型处理器 TypeHandler

目录

  • 前言

  • 参考目录

  • 学习笔记

    • 1、`type` 包中类的归类总结

    • 2、类型处理器

    • 2.1、`TypeReference` 类

    • 3、类型注册表

    • 3.1、`TypeHandlerRegistry#getTypeHandler`


前言

本文内容对应的是书本第 8 章的内容,主要是关于类型处理器  TypeHandler 的学习。

这一章节的学习有些地方理解还不算深入,Debug 之后还是有些不太能够理解的地方,到了后面的章节深入学习之后,再回头看希望会有新的收获。

参考目录

  • 《通用源码阅读指导书:MyBatis源码详解》

本文主要内容来自 第8章 type包

与上篇一样,需要说明的是,书中使用的框架版本和本文(本专栏)使用的版本不一样。

名称 书中版本 专栏版本
MyBatis 3.5.2 3.5.11+
Spring Boot 2.X 3.X
JDK 8 17+

随着版本的升级迭代,会有一些内容不尽相同,需要结合着进行学习。

学习笔记

1、type 包中类的归类总结

本章开篇首先对包中的所有类进行了分类,因为篇幅比较长,所以我整理了以下表格方便以后查阅。

组别 数量 类名称 说明
类型处理器 1接口
1基础实现类
1辅助类
43实现类
1接口:TypeHandler  
1基础实现类:BaseTypeHandler
1辅助类:TypeReference
43实现类:*TypeHandler
TypeHandler:类型处理器接口
BaseTypeHandler:类型处理器基础实现
TypeReference:类型参考器
*TypeHandler:类型处理器
类型注册表 3 SimpleTypeRegistry
TypeAliasRegistry
TypeHandlerRegistry
SimpleTypeRegistry:基本类型注册表
TypeAliasRegistry:类写别名注册表
TypeHandlerRegistry:类型处理器注册表
注解 3 @Alias
@MappedJdbcTypes
@MappedTypes
@Alias:设置别名
@MappedJdbcTypes:配置JDBC类型处理器
@MappedTypes:配置Java类型处理器
异常类 1 TypeException 类型处理相关异常
工具类 1 ByteArrayUtils 数组转换工具
枚举 1 JdbcType JDBC类型

本章的着重点在于表格前两组,即 类型处理器 以及 类型注册表

2、类型处理器

类型处理器的设计使用了模板模式。

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

2.1、TypeReference

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

3、类型注册表

类型注册表一共三个,分别是 SimpleTypeRegistryTypeAliasRegistryTypeHandlerRegistry

SimpleTypeRegistry 是一个非常简单的注册表,其内部使用一个SIMPLE_TYPE_SET变量维护所有 Java基本类型。

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

TypeAliasRegistry是一个类型别名注册表,其内部使用 typeAliases变量维护类型的别名与类型的对应关系。

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

TypeHandlerRegistry 是这三个注册表中最为核心的一个,数据类型和相关处理器的对应关系就是由它维护的。

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

运行时保存的内容:

// JDBC 类型与对应类型处理器的映射
private final Map<JdbcType, TypeHandler<?>> jdbcTypeHandlerMap = new EnumMap<>(JdbcType.class);
【MyBatis】源码学习 03 - 类型处理器 TypeHandler

// Java 类型与 Map<JdbcType, TypeHandler<?>> 的映射
private final Map<Type, Map<JdbcType, TypeHandler<?>>> typeHandlerMap = new ConcurrentHashMap<>();
【MyBatis】源码学习 03 - 类型处理器 TypeHandler

3.1、TypeHandlerRegistry#getTypeHandler

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

【MyBatis】源码学习 03 - 类型处理器 TypeHandler
【MyBatis】源码学习 03 - 类型处理器 TypeHandler

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

(完)


原文始发于微信公众号(狮子领域 程序圈):【MyBatis】源码学习 03 – 类型处理器 TypeHandler

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/215004.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!