深入MyBatis原理及源码:从核心机制到实战解析 深入解析 MyBatis 原理及源码:从 XML 到 SQL 的优雅旅程
在 Java 生态系统中,MyBatis 作为半自动 ORM(对象关系映射)框架,凭借其灵活性和对原生 SQL 的完全控制,占据了企业级开发的重要地位。与 Hibernate 全自动映射不同,MyBatis 允许开发者直接编写 SQL,同时通过简单的配置实现对象与数据库表的映射。 本文将深入剖析 MyBatis 的核心工作原理,结合源码级分析,揭示其如何从 XML 配置解析到最终执行 SQL 并封装结果集。
一、 MyBatis 核心架构概览
MyBatis 的设计遵循了清晰的分层架构,主要可以分为以下几个核心模块: 1. 配置解析层:负责加载 XML 配置文件或注解,将其转换为内存中的 Configuration 对象。 2. SQL 构建层:解析 Mapper 接口和方法,动态生成 SQL 语句。 3. 执行引擎层:通过 Executor 执行 SQL,处理缓存、事务等逻辑。 4. 结果映射层:将 ResultSet 转换为 Java 对象。 ```mermaid graph TD A[用户代码] > B[SqlSession] B > C[Executor] C > D[StatementHandler] D > E[ParameterHandler] D > F[ResultSetHandler] E > G[PreparedStatement] F > G G > H[Database] ```
二、 初始化阶段:Configuration 的构建
MyBatis 的启动过程始于 `SqlSessionFactoryBuilder` 构建 `SqlSessionFactory`。这一阶段的核心任务是解析配置并构建内存模型。
1. XML 解析流程
当 MyBatis 启动时,它会读取 `mybatis-config.xml` 和 Mapper XML 文件。通过 `XMLConfigBuilder` 和 `XMLMapperBuilder` 类,将 XML 内容解析为 Java 对象。
- 核心数据结构:`org.apache.ibatis.session.Configuration`
- 存储所有映射语句(MappedStatement)
- 存储类型别名(TypeAliasRegistry)
- 存储类型处理器(TypeHandlerRegistry)
- 存储插件(InterceptorChain)
2. MappedStatement 的生成
每个 `