本仓库用来存放解读mybatis
源码中用到的一些技术的使用示例,对源码进行详细的注释,以及通过分析重写一步步演化mybatis
系统的构建过程!
mybatis-3.4.1
- (1) 使用DOM解析XML的示例
- (2) 使用XPath查询XML的示例
- (3) 构建通用占位符解析器
GenericTokenParser
及其优化 - (4) 构建包装了
Node
节点类XNode
- (5) 构建反射模块中的核心类
Reflector
- (6) 构建反射模块中解析字段、方法返回值、方法参数类型的类
TypeParameterResolver
- (7) 构建属性表达式解析工具类
PropertyTokenizer
- (8) 构建可解析属性表达式并获取指定属性描述信息的类
MetaClass
- (9) 构建可根据对象类型获取对象的类元信息、解析属性表达式、获取设置属性值的类
MetaObject
- (10) 构建对象包装类
BeanWrapper
、MapWrapper
、CollectionWrapper
,分别包装普通JavaBean、Map、Collection类型对象 - (11) 构建类型转换器基础接口
TypeHandler
、解析类型引用的抽象类TypeReference
、类型转换器基类BaseTypeHandler
,所有类型的类型转换器 - (12) 构建类型转换器注册器
TypeHandlerRegistry
,注册器提供了常用类型转换器的注册、存在判断和获取的功能 - (13) 构建资源加载类
Resources
,可通过资源路径(一般是文件路径)、网络URL路径去加载得到资源,Resources
依赖ClassLoaderWrapper
将资源转化为各种格式 - (14) 构建类别名注册器
TypeAliasRegistry
,支持对单个类指定或默认别名注册,也支持多单个或多个包中的所有特定类进行别名注册(注册的别名全部都是默认的简单小写类名) - (15) 构建日志模块,定义框架使用的统一
Log
接口,使用适配器模式来适配包装不同的日志框架,在LogFactory
中完成功能组装加载适配器,mybatis的使用日志时直接使用LogFactory
创建Log
对象 - (16) 构建JDBC调试代理类,
BaseJdbcLogger
是代理类的抽象基类,定义了打印SQL日志时的一些公共操作,实现的代理子类有ConnectionLogger
、PreparedStatementLogger
、StatementLogger
、ResultSetLogger
- (17) 构建资源加载模块
ResolverUtil
根据指定条件查找指定包下的类,依赖于VFS
找到类的路径,VFS
有两个实现类DefaultVFS
、JBoss6VFS
- (18) 构建数据源模块,使用工厂方法模式,实现非连接池数据源工厂
UnpooledDataSourceFactory
创建非连接池数据源UnpooledDataSource
,带连接池数据源工厂PooledDataSourceFactory
创建数据源连接池PooledDataSource
- (19) 构建
Transaction
模块,使用工厂方法模式,实现简单JDBC管理的事务JdbcTransaction
、容器管理的ManagedTransaction
- (20) 构建
binging
模块,使用工厂模式 + 动态代理,实现mapper.xml的SQL标签(id)和Mapper接口的方法(方法名)的动态绑定,如果不匹配则会在初始化阶段报错 - (21) 构建缓存模块,使用适配器模式,实现阻塞缓存、FIFO缓存、LRU缓存、软引用缓存、弱引用缓存、带生命周期缓存、缓存日志、同步缓存、序列化缓存,适配器模式允许多种缓存自由组合
- (22) 构建
XMLConfigBuilder
,了解Mybatis
解析配置文件的完整流程 - (23) 构建mybatis的初始化流程,Builder构造器基类定义了各具体的构造器在初始化过程中用到的一些公共操作,包括:解析字符串是否符合正则表达式、类别名解析、内建枚举类型的转化、根据配置解析获取类型转换器等;通过
XMLConfigBuilder
解析mybatis-config.xml,通过XMLMapperBuilder
解析映射文件,通过XMLStatementBuilder
解析mapper.xml中定义的sql标签节点 - (24) 解析映射配置文件中的SQL节点,构建
SqlNode
接口及其多个动态节点的实现类,解析SQL节点的配置信息保存到SqlSource
中