MyBatis体系结构
反射模块
- Reflector简化反射操作,对常见的反射操作进一步封装,提供了更加简洁方便的API
- 每一个Reflector对象都对应一个Java类
- 通过ReflectorFactory获取Reflector对象,并支持缓存Reflector对象
ReflectorFactory factory = new DefaultReflectorFactory();
Reflector reflector = factory.findClass(User.class);
类型转换模块
- TypeHandler的作用是实现JavaType与JDBCType的双向转换
- BaseTypeHandler实现了TypeHandler接口,实现了对空数据的处理
- 系统中各种TypeHandler实现类都保存在TypeHandlerRegistry中,方便查找使用
- 我们自定义的TypeHandler需要继承BaseTypeHandler类
StatementHandler
ParameterHandler
ResultHandler
日志模块
- 日志模块使用了适配器模式,适配到对应的日志框架的实现类
- mybatis默认使用slf4j日志框架
- 提供了error、debug、trace、warn四个日志级别
- 提供了commons-logging、log4j、log4j2、slf4j、stdout、jdklogging、nologging日志框架
- 可以在mybatis-config.xml中settings标签下配置选择使用什么日志框架
<setting name="logImpl" value="STDOUT_LOGGING" />
binding模块
- MapperRegistry:负责保存Mapper接口与MapperProxyFactory的对应关系
- MapperProxyFactory:创建接口的代理对象
- MapperProxy:Mapper接口的代理对象
- MapperMethod:负责执行对应的statement(inser/update/delete/select)
MyBatis缓存
- MyBatis中自带的有一级缓存和二级缓存
- MyBatis中的一级缓存默认是打开的
- MyBatis中的二级缓存默认是关闭的,需要我们手动打开
- 我们执行SQL查询操作时先检查二级缓存,再检查一级缓存
MyBatis自定义插件
自定义插件实现Interceptor接口