mybatis 整体架构 orm框架
缓存模块
一级缓存 - 与sqlSession绑定
PS. 使用自增函数,需要手动设置清空缓存,否则可能导致每次查询结果都一样
二级缓存 跟 namespace绑定,跨sqlSession
缓存装饰器
缓存key
日志模块
数据源连接池核心类
PooledDataSource
一个简单,同步的、线程安全的数据库连接池
PooledConnection
使用动态代理封装了真正的数据库连接对象;
PoolState
用于管理PooledConnection对象状态的组件,通过两个list分别 管理空闲状态的连接资源和活跃状态的连接资源
高频面试题
请详细描述从数据库连接池中获取一个连接资源的过程?
获取连接
https://www.processon.com/diagraming/5e8dcace6376894bc680def4
释放连接
https://www.processon.com/diagraming/5e8dd0610791292c97b46bde
反射核心类
ObjectFactory
MyBatis每次创建结果对象的新实例时,它都会使用对象工厂(ObjectFactory)去构建POJO;
ReflectorFactory
创建Reflector的工厂类,Reflector是MyBatis反射模块的基础,每个Reflector对象都对应一个类,在其中缓存了反射操作所需要的类元信息;
ObjectWrapper
对对象的包装,抽象了对象的属性信息,他定义了一系列查询对象属性信息的方法,以及更新属性的方法;
ObjectWrapperFactory
ObjectWrapper 的工厂类,用于创建ObjectWrapper ;
核心流程
配置信息加载
binding模块
Executor组件 - 运行sql