配置加载阶段
读取配置文件:加载
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)。
评论