MyBatis 初始化深度解析:从配置文件到 Configuration 构建全流程
MyBatis 的初始化过程本质是 “读取并解析所有配置文件(全局配置 + Mapper 映射),将配置信息组装为 Configuration 核心对象,最终基于该对象创建 SqlSessionFactory” 的过程。本文结合 MyBatis 3.5.x 源码,从 “入口→全局配置解析→Mapper 映射解析→Configuration 组装” 四个维度,完整拆解初始化逻辑,帮你理解每一步配置的作用与组件关联。
初始化核心目标与整体流程
在深入源码前,先明确初始化的核心产出和整体链路,建立宏观认知:
核心目标
- 构建
Configuration 对象:MyBatis 的 “全局配置中心”,存储所有配置信息(数据源、SQL 语句、结果映射、插件、别名等);
- 创建
SqlSessionFactory:基于 Configuration 生成,是后续创建 SqlSession(数据库会话)的工厂,全局唯一。
整体流程链路
graph TD
A[加载 mybatis-config.xml 输入流] --> B[创建 XMLConfigBuilder 解析器]
B --> C[解析全局配置节点 properties/settings/typeAliases等]
C --> D[解析 mappers 节点,加载并解析所有 Mapper.xml]
D --> E[将所有配置信息组装到 Configuration 对象]
E --> F[基于 Configuration 创建 SqlSessionFactory]
初始化入口:SqlSessionFactoryBuilder.build ()
MyBatis 初始化的入口是 SqlSessionFactoryBuilder 的 build() 方法,该方法负责触发配置解析并生成 SqlSessionFactory。
入口源码解析