一、模块概览
模块名称 |
作用 |
主要类 |
反射模块 |
封装JAVA API,易用,进行了缓存优化 |
|
类型转换模块 |
绑定实参及映射查询结果集 |
|
日志模块 |
定位BUG,解决瓶颈 |
|
资源加载模块 |
类加载器,确定类加载器使用顺序 |
|
解析器模块 |
Xpath,初始化解析mybatis-confg.xml,mapper.xml, 动态SQL占位符 |
XPathParser TokenHandler EntityResolver
|
数据源模块 |
|
|
事务管理模块 |
抽象处理 |
|
缓存模块 |
提供一级和二级缓存 |
|
Binding模块 |
自定义Mapper接口与映射语句关联 |
|
二、模块分析
2.1 解析器模块
顾名思义:提供XML文件的解析。
![11.png wKiom1m92kWCa6rbAACSiiapZO8884.png]()
GenericTokenParser:通用的占位符解析器。
TokenHandler:解析占位符
![111.png wKioL1m93a6yBxxZAAA0GAyxW1M548.png]()
2.2 反射工具箱
![555.png wKioL1m958qjeKqhAADItQaNWmY284.png]()
-
Reflector:一个Reflector对应一个类,缓存了反射需要类的元信息。
-
ReflectorFactory:生成缓存Reflector
-
TypeParameterResolver:工具类,解析指定类中的字段,方法返回值,方法参数的类型。
-
PropertyTokenizer 是一个Iterator接口,实现嵌套属性解析。
-
MetaClass:类级别元信息的封装和处理
-
ObjectWrapper:对象的包装,抽象了对象的属性信息,定义了更新属性,查询属性信息的方法。
-
ObjectFactory:创建指定类型的对象
-
MetaObject:调用ObjectWrapper,完成对象属性的检测,获取,设置等功能。
3. 类型转换
JDBC到JAVA类型转换 及JAVA类型到JDBC类型转换,两种不同类型的桥梁。
![888.png wKiom1m98CygnHFyAACzFXyUlAA027.png]()
ResolverUtil:根据指定的条件查找指定包下的类。
3.日志模块
适配了第三方日志接口的差异。
![777.png wKioL1m98znwZAvCAABaUNekuwM507.png]()
JDBC调试:通过JDK动态代理方式,将JDBC操作通过指定的日志框架打印出来。
![66666.png wKioL1m99wLiTFjEAAAae6_0bdQ534.png]()
4.Binding
![7777.png wKiom1m-AZ6h1xZHAADHgZMmtiA547.png]()
MapperProxy:代理对象
MapperRegistry:Mapper接口及对应代理对象工厂的注册中心。
MapperMethod:封装了Mapper接口中对应方法的信息,以及SQL语句信息。
ParamNameResolver:Mapper接口定义的方法参数。记录参数列表中位置索引和参数名称对应关系
MethodSignature:Mapper接口中定义的方法的相关信息。
本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/1966021,如需转载请自行联系原作者