Skip to content

huyihao/mybatis-source-analysis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

46d6705 · Aug 29, 2019

History

26 Commits
Aug 25, 2019
Jun 12, 2019
Aug 29, 2019
Jun 16, 2019
Aug 29, 2019

Repository files navigation

mybatis-source-analysis

本仓库用来存放解读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) 构建对象包装类BeanWrapperMapWrapperCollectionWrapper,分别包装普通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日志时的一些公共操作,实现的代理子类有ConnectionLoggerPreparedStatementLoggerStatementLoggerResultSetLogger
  • (17) 构建资源加载模块ResolverUtil根据指定条件查找指定包下的类,依赖于VFS找到类的路径,VFS有两个实现类DefaultVFSJBoss6VFS
  • (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

About

analyse mybatis source code by rewriting.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages