开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第42天,点击查看活动详情
周六继续上班
MyBatis包结构
MyBatis中的包根据功能将类分类到一起,根据包名就可以大致猜到包里面类的作用。接着看MyBatis中的功能包都有哪一些。
type包
type包中的类有五十几个。其中我们可以将其中的类型进行划分,大致可以划分为以下几类:
- 类型处理器
- TypeHandler:类型处理器接口;
- BaseTypeHandler:类型处理器的基础实现;
- TypeReference:类型参考器;
- *TypeHandler:43个类型处理器。
- 类型注册表
- SimpleTypeRegistry:基本类型注册表,内部使用 Set 维护了所有 Java 基本数据类型的集合;
- TypeAliasRegistry:类型别名注册表,内部使用 HashMap维护了所有类型的别名和类型的映射关系;
- TypeHandlerRegistry:类型处理器注册表,内部维护了所有类型与对应类型处理器的映射关系。
- 注解类
- Alias:使用该注解可以给类设置别名,设置后,别名和类型的映射关系便存入TypeAliasRegistry中;
- MappedJdbcTypes:有时我们想使用自己的处理器来处理某些 JDBC 类型,只需创建 BaseTypeHandler 的子类,然后在上面加上该注解,声明它要处理的JDBC类型即可;
- MappedTypes:有时我们想使用自己的处理器来处理某些Java类型,只需创建BaseTypeHandler的子类,然后在上面加上该注解,声明它要处理的 Java类型即可。
类型处理器
ORM框架,需要处理的是Java对象中属性和数据库中字段的映射,MyBatis自然也需要处理这一块的内容。Java中存在多种数据类型,如Integer、String、Date这类属性,而数据库中则可能是varchar、longvarchar、tinyint。因此,针对不同类型的属性,需要提供不同的映射处理方法。
MyBatis将每种类型对应的处理方式封装在了对应的类型处理器TypeHandler中。例如,IntegerTypeHandler负责完成对 Integer类型的处理。
type 包共有 43 个类型处理器,这些类型处理器的名称也均以TypeHandler结尾。而 TypeHandler和 BaseTypeHandler则分别是类型处理器接口和类型处理器基类。
类型注册表
有了类型处理器,那么遇到了具体的类型,MyBatis需要怎样查找具体的处理器呢?这里MyBatis提供了类型注册表来解决类型的查找问题。
type 包中的类型注册表有三个:SimpleTypeRegistry、TypeAliasRegistry 和 TypeHandlerRegistry。
- SimpleTypeRegistry 是一个非常简单的注册表,其内部使用一个SIMPLE_TYPE_SET变量维护所有 Java基本类型。
- TypeAliasRegistry是一个类型别名注册表,其内部使用 typeAliases变量维护类型的别名与类型的对应关系。
- TypeHandlerRegistry 是这三个注册表中最为核心的一个,数据类型和相关处理器的对应关系就是由它维护的。