乐于分享
好东西不私藏

谈谈MyBatis的启动过程?源码级流程,面试满分口述版

谈谈MyBatis的启动过程?源码级流程,面试满分口述版

大家好,继续我们的Java面试系列,用通俗流程+分层拆解,把MyBatis从启动加载、解析配置、初始化环境、构建工厂完整流程讲透,面试直接按顺序背就能高分作答。


面试官提问:谈谈 MyBatis 的启动过程?

一、一句话总体理解

MyBatis 启动本质就是:加载配置文件 → 解析全局配置和Mapper映射 → 封装配置环境 → 构建SqlSessionFactory工厂
启动阶段只做配置解析和资源初始化,不操作数据库,真正执行SQL是在后续调用Mapper方法时才触发。


二、MyBatis 启动完整七大步骤(面试必背流程)

  1. 1. 读取核心全局配置文件
  2. 2. 创建 SqlSessionFactoryBuilder 构造器
  3. 3. 通过 XMLConfigBuilder 解析全局配置
  4. 4. 依次解析全局内部节点(环境、数据源、插件、别名、Mapper等)
  5. 5. 解析所有 Mapper 映射文件/Mapper接口
  6. 6. 把所有配置信息封装到 Configuration 全局配置对象
  7. 7. 由配置对象构建 SqlSessionFactory 工厂,启动完成

三、逐步骤通俗详细拆解

1. 加载全局配置文件

项目启动时,读取 mybatis-config.xml 核心配置文件;
如果是 SpringBoot 整合,就是读取 application.yml 中 MyBatis 配置、Mapper 路径等。

2. 创建 SqlSessionFactoryBuilder

它是启动入口构造器,专门用来解析配置、建造工厂,用完即弃,不用常驻内存。

3. 进入 XMLConfigBuilder 解析全局配置

MyBatis 底层用 建造器模式,XMLConfigBuilder 负责逐行解析配置标签:

  • • properties 外部配置
  • • typeAliases 实体类别名
  • • plugins 插件
  • • environments 数据库环境、事务管理器、数据源
  • • mappers 扫描Mapper接口和XML文件

4. 解析 Mapper 映射(核心重点)

解析 <mappers> 节点:

  • • 扫描指定包下所有 Mapper 接口
  • • 加载对应的 Mapper.xml 映射文件
  • • 解析每一个标签:select、insert、update、delete、resultMap、sql片段
  • • 把每条 SQL 语句、参数类型、返回值类型 封装成 MappedStatement

关键点:启动时就把所有SQL提前解析好,存入内存,后续调用直接取用,不用重复解析。

5. 封装到 Configuration 全局对象

解析完的所有配置、所有Mapper、所有SQL、插件、数据源
全部统一存入 Configuration 单例对象中。
它相当于 MyBatis 的全局内存仓库,整个容器只有一份。

6. 构建 SqlSessionFactory

拿着 Configuration 配置对象,创建 DefaultSqlSessionFactory 实现类。
SqlSessionFactory 全局单例,整个项目只创建一次。

7. 启动完成,等待业务调用

启动结束后:

  • • 配置已全部加载到内存
  • • SQL 已全部解析缓存
  • • 工厂已就绪
    后续业务调用 Mapper 接口方法时,再获取 SqlSession、执行 SQL。

四、关键核心类梳理(面试加分)

  • • SqlSessionFactoryBuilder:启动入口,负责解析配置、建造工厂
  • • XMLConfigBuilder:解析全局配置文件
  • • XMLMapperBuilder:解析 Mapper 映射文件
  • • Configuration:MyBatis 全局大管家,存放所有配置、Mapper、SQL
  • • MappedStatement:封装每一条 SQL 语句及相关配置
  • • SqlSessionFactory:生产 SqlSession 的工厂,全局单例

五、手绘逻辑流程(口述版)

加载mybatis-config.xml
        ↓
SqlSessionFactoryBuilder
        ↓
XMLConfigBuilder 解析全局配置
        ↓
解析环境、数据源、插件、别名、mappers
        ↓
XMLMapperBuilder 解析所有Mapper接口和XML
        ↓
封装所有信息到 Configuration
        ↓
构建 SqlSessionFactory
        ↓
启动完成

六、SpringBoot 环境下启动变化(实际开发必说)

原生 MyBatis 需要手动写代码解析配置、创建工厂;
SpringBoot 整合后自动完成:

  1. 1. 自动配置类 MybatisAutoConfiguration
  2. 2. 自动扫描 Mapper 包
  3. 3. 自动创建 SqlSessionFactory、SqlSessionTemplate
  4. 4. 自动生成 Mapper 代理对象,注入 Spring 容器
    开发人员无需关心启动底层流程,框架自动帮我们走完整个初始化。

面试现场回答关键点(精简背诵版)

  1. 1. MyBatis 启动核心流程:加载配置 → 解析配置 → 封装Configuration → 构建SqlSessionFactory
  2. 2. 由 SqlSessionFactoryBuilder 作为入口,通过XML构造器解析全局配置和Mapper文件。
  3. 3. 启动时提前解析所有SQL并封装为MappedStatement,缓存到Configuration中。
  4. 4. Configuration 是全局配置容器,保存所有环境、插件、Mapper、SQL信息。
  5. 5. 最终生成 SqlSessionFactory 单例工厂,启动完成。
  6. 6. 启动只做配置解析,不操作数据库;真正执行SQL在业务调用阶段。
  7. 7. SpringBoot 环境自动完成整个启动初始化,无需手动编码。

如果你有想优先讲解的面试题,欢迎在评论区留言~

运行效果

END

你的关注将是我持续更新的动力
↓↓↓