后端岗位面试题更新 2026-08-05

请阐述 MyBatis 从启动到执行 SQL 的完整内部流程,包括配置加载、SqlSession 创建、Mapper 代理、SQL 解析与执行等关键步骤,并说明各步骤之间的衔接关系。

后端开发技术原理JavaMyBatis

考察说明

考查对 MyBatis 核心执行链路的整体理解,包括配置加载、代理生成、SqlSession 与 Executor 的协作机制。

回答思路

  1. 【回答框架 1】MyBatis 启动时解析 mybatis-config.xml 和映射文件,构建 Configuration 对象,并注册 MappedStatement,每个 MappedStatement 对应一条 SQL 及其参数和结果映射信息。
  2. 【回答框架 2】通过 SqlSessionFactory 创建 SqlSession,SqlSession 是门面接口,内部封装了 Executor、Transaction 等核心组件。Executor 负责 SQL 执行,包括一级缓存、二级缓存和延迟加载等逻辑。
  3. 【回答框架 3】Mapper 接口通过 JDK 动态代理生成代理对象,调用接口方法时,代理根据方法签名找到对应的 MappedStatement 的唯一 id(namespace+方法名)。
  4. 【回答框架 4】执行 SQL 的过程包括:解析动态 SQL 生成 BoundSql,通过 ParameterHandler 设置参数,通过 StatementHandler 创建并执行 Statement,最后通过 ResultSetHandler 将结果集映射为实体对象。
  5. 【关键点 1】MyBatis 初始化阶段构建 Configuration 并注册 MappedStatement。
  6. 【关键点 2】SqlSession 是门面,核心执行器是 Executor。
  7. 【关键点 3】Mapper 接口使用 JDK 动态代理,方法调用映射到 MappedStatement。
  8. 【关键点 4】SQL 执行经过四大组件:Executor、StatementHandler、ParameterHandler、ResultSetHandler。
  9. 【关键点 5】动态 SQL 在运行时解析为 BoundSql,参数和结果映射依赖 TypeHandler。
  10. 【易错点 1】把 SqlSession 的创建误认为是线程安全的,实际上 SqlSession 非线程安全,通常每个线程使用独立实例。
  11. 【易错点 2】忽略 MappedStatement 的 id 规则,导致找不到 SQL。
  12. 【易错点 3】混淆一级缓存和二级缓存的作用范围,一级缓存是 SqlSession 级别,二级缓存是 namespace 级别。