淘先锋技术网

首页 1 2 3 4 5 6 7

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接口