以下Mybatis解析基于org.mybatis:mybatis:3.4.5
一、整体设计
图片来源
二、核心类解读
1. SqlSession和SqlSessionFactory
SqlSession是Mybatis框架对外暴露的顶层API接口,通过这个接口可以实现增删改查、事务管理等数据库操作,框架中提供了DefaultSqlSession和SqlSessionManager两个实现类。
在SqlSession的所有增删改查的操作方法中,其第一个参数均为String statement,对应接口层的statementId(或者mapper接口中方法的方法名),具有DefaultSqlSessionFactory和SqlSessionManager两个实现类。
SqlSessionFactory是SqlSession的工厂类,根据连接或者数据源生成SqlSession。
2. Executor
Executor是mybatis的核心执行器接口,mybatis的大部分逻辑处理都在Executor完成,包括缓存处理,根据MappedStatement和参数生成动态sql语句,并返回sql的执行结果。框架中的抽象类BaseExecutor实现了Executor,SimpleExecutor、BatchExecutor,ReuseExecutor,ClosedExecutor又继承了BaseExecutor。
3. StatementHandler
StatementHandler负责与jdbc中的Statement相关的交互处理,包括参数设置和ResultSet转化。
4. ParameterHandler
参数处理与映射,给Statement对象设置参数,最常见的就是被StatementHandler和Interceptor调用。
5. ResultSetHandler
结果集处理与映射,处理Statement执行后产生的结果集ResultSet,生成结果列表List。也用作储存过程执行后的输出。
6. TypeHandler
jdbc和java类型的映射,协助ParameterHandler和ResultSetHandler进行处理。
7. Configuration
维护mybatis中所有的配置信息。
三、层次结构
图片来源