MyBatis 是一款轻量级的持久层框架,通过灵活的 SQL 映射和高效的执行机制,成为 Java 开发中的热门选择。要深入掌握 MyBatis 的工作原理,理解其核心类及其职责至关重要。本文将带你梳理 MyBatis 的关键类、初始化流程以及它们之间的协作关系,帮助你构建完整的 MyBatis 架构知识体系。
MyBatis 的核心类构成了其运行时的骨架,每个类都承担着特定的职责。以下是核心类的层级结构图:
SqlSessionFactoryBuilder
↓
SqlSessionFactory (DefaultSqlSessionFactory)
↓
SqlSession (DefaultSqlSession)
↓
Executor
↓
StatementHandler
↓
ParameterHandler / TypeHandler / ResultSetHandler
SqlSessionFactoryBuilder
org.apache.ibatis.session.SqlSessionFactoryBuilder
SqlSessionFactory
。mybatis-config.xml
配置文件或 Java API 方式创建 Configuration
对象。SqlSessionFactory
DefaultSqlSessionFactory
org.apache.ibatis.session.SqlSessionFactory
SqlSession
实例。Configuration
实例,管理 MyBatis 的全局配置(如数据源、事务工厂、插件等)。SqlSession
DefaultSqlSession
org.apache.ibatis.session.SqlSession
selectList
, insert
, update
, delete
)。SqlSession
实例。Executor
执行 SQL 操作。Executor
SimpleExecutor
, ReuseExecutor
, BatchExecutor
org.apache.ibatis.executor.Executor
MappedStatement
org.apache.ibatis.mapping.MappedStatement
、
等标签或注解中的 SQL 对应一个 MappedStatement
。Configuration.mappedStatements
中。Configuration
org.apache.ibatis.session.Configuration
SqlSessionFactoryBuilder
加载生成。LanguageDriver
(如 Groovy、Velocity 模板引擎)。StatementHandler
RoutingStatementHandler
, SimpleStatementHandler
, PreparedStatementHandler
, CallableStatementHandler
org.apache.ibatis.executor.statement.StatementHandler
Statement
、PreparedStatement
、CallableStatement
。ParameterHandler
DefaultParameterHandler
org.apache.ibatis.executor.parameter.ParameterHandler
PreparedStatement
中。TypeHandler
完成类型转换。TypeHandler
org.apache.ibatis.type.TypeHandler
ResultSetHandler
DefaultResultSetHandler
org.apache.ibatis.executor.resultset.ResultSetHandler
ResultSet
,将其转换为 Java 对象。加载配置文件
SqlSessionFactoryBuilder.build()
方法读取 mybatis-config.xml
。Configuration
对象。解析映射文件
MappedStatement
,注册到 Configuration
中。创建 SqlSessionFactory
DefaultSqlSessionFactory
实例,包含完整的 Configuration
。创建 SqlSession
sqlSessionFactory.openSession()
创建 SqlSession
。SqlSession
内部持有 Executor
实例。执行 SQL
SqlSession
的 API(如 selectList
)触发 SQL 执行。Executor
→ StatementHandler
→ JDBC → ParameterHandler
/ResultSetHandler
。MyBatis 的设计融合了多种经典设计模式,提升了灵活性和可扩展性:
SqlSessionFactoryBuilder
负责构建 SqlSessionFactory
。SqlSessionFactory
创建 SqlSession
。Executor
的执行流程定义了骨架,具体步骤由子类实现。扩展点示例:
LanguageDriver
支持 Groovy、Velocity 等脚本语言。TypeHandler
处理复杂类型转换(如 JSON、枚举)。类名 | 职责简述 |
---|---|
SqlSessionFactoryBuilder |
构建 SqlSessionFactory |
SqlSessionFactory |
创建 SqlSession |
SqlSession |
提供数据库操作 API |
Executor |
SQL 执行引擎 |
MappedStatement |
单条 SQL 的封装 |
Configuration |
全局配置管理器 |
StatementHandler |
JDBC Statement 操作 |
ParameterHandler |
设置 SQL 参数 |
TypeHandler |
Java 与 JDBC 类型转换 |
ResultSetHandler |
结果集处理 |
,
等标签。