配置加载阶段
读取配置文件:加载
mybatis-config.xml
(全局配置,如数据源、插件、类型处理器等)。加载映射文件:解析
Mapper.xml
或注解形式的 SQL 定义,生成MappedStatement
对象(包含 SQL、参数/结果映射等信息)。构建
SqlSessionFactory
:通过SqlSessionFactoryBuilder
创建单例的SqlSessionFactory
(核心工厂类)。
创建 SqlSession
通过
SqlSessionFactory.openSession()
创建SqlSession
(核心会话对象,封装了与数据库的交互方法)。默认使用
Executor
执行器(可能包含一级缓存)。
执行 SQL 流程
获取 Mapper 接口代理对象
调用
sqlSession.getMapper(UserMapper.class)
时,MyBatis 通过动态代理(如JDK Proxy
)生成Mapper
接口的代理对象。
方法调用触发代理逻辑
代理对象拦截接口方法调用,根据方法名映射到对应的
MappedStatement
(通过namespace + 方法名
定位)。
参数处理
将方法参数转换为 SQL 参数:
使用
TypeHandler
处理 Java 类型与 JDBC 类型的转换。根据
@Param
注解或参数顺序绑定到 SQL 中的#{param}
占位符。
SQL 执行
Executor 执行:
SimpleExecutor:每次执行新 SQL(默认)。
ReuseExecutor:复用预处理语句(
PreparedStatement
)。BatchExecutor:批量操作。
CachingExecutor(二级缓存):优先查询缓存,未命中则委托给其他执行器。
StatementHandler:处理
Statement
(如PreparedStatement
)的创建、参数填充。ParameterHandler:将 Java 参数转换为 JDBC 参数。
结果映射
ResultSetHandler:将
ResultSet
转换为 Java 对象:根据
resultType
/resultMap
配置映射字段。使用
TypeHandler
处理类型转换。支持嵌套查询(
association
/collection
)。
评论