⚙️ SQL 执行流程
高频 ⭐⭐⭐⭐⭐
覆盖:SqlSession 生命周期、Executor 三种模式、StatementHandler / ParameterHandler / ResultSetHandler、延迟加载原理。
MyBatis 是 Java 生态中最流行的半自动 ORM 框架,在国内企业项目中几乎无处不在。面试中,MyBatis 的考察从「会用」升级到「懂原理」——能说清楚 SQL 执行流程、缓存机制、插件拦截原理的候选人,才能脱颖而出。
本系列将 MyBatis 面试核心内容拆解为 四大专题:
第1阶段 SQL执行 → Executor、StatementHandler第2阶段 缓存机制 → 一级缓存、二级缓存第3阶段 插件 → 拦截器、插件链第4阶段 动态SQL → OGNL、标签解析 MyBatis │ ┌───────────┬─────────────┴─────────────┐ ▼ ▼ ▼ ▼ SQL执行 缓存 插件 动态SQL │ │ │ │• Executor • 一级缓存 • Interceptor • if/choose• Statement • 二级缓存 • 四大对象 • where/set• Parameter • 缓存策略 • 插件链 • foreach• ResultSet • 脏读风险 • PageHelper • trim| 专题 | 考察频率 | 难度 | 核心能力 |
|---|---|---|---|
| SQL执行 | ★★★★★ | 高 | 执行流程 |
| 缓存 | ★★★★★ | 中 | 缓存策略 |
| 插件 | ★★★★☆ | 高 | 拦截原理 |
| 动态SQL | ★★★★☆ | 中 | 标签解析 |
⚙️ SQL 执行流程
高频 ⭐⭐⭐⭐⭐
覆盖:SqlSession 生命周期、Executor 三种模式、StatementHandler / ParameterHandler / ResultSetHandler、延迟加载原理。
🗄️ 一/二级缓存
🔌 插件机制
📝 动态 SQL
| 知识点 | 初级面试 | 中级面试 | 高级面试 |
|---|---|---|---|
| #与$ 区别 | ✅ 必问 | ✅ 必问 | ✅ 必问 |
| SQL 执行流程 | 偶尔 | ✅ 常问 | ✅ 必问 |
| Executor 类型 | ❌ 少问 | ✅ 常问 | ✅ 必问 |
| 一级缓存 | ✅ 常问 | ✅ 常问 | ✅ 必问 |
| 二级缓存脏读 | ❌ 少问 | ✅ 常问 | ✅ 必问 |
| 插件原理 | ❌ 少问 | 偶尔 | ✅ 必问 |
| 动态 SQL 原理 | 偶尔 | ✅ 常问 | ✅ 必问 |
| 延迟加载原理 | ❌ 少问 | 偶尔 | ✅ 常问 |
┌─────────────────────────────────────────────────┐│ 应用层 ││ Mapper 接口 → SqlSession → 业务代码 │├─────────────────────────────────────────────────┤│ 核心层 ││ Configuration → MappedStatement → BoundSql ││ Executor → StatementHandler → ResultSetHandler │├─────────────────────────────────────────────────┤│ 基础支撑层 ││ 类型处理器 TypeHandler / 日志 / 缓存 / 插件链 │├─────────────────────────────────────────────────┤│ 数据源层 ││ DataSource → Connection → JDBC / PreparedStmt │└─────────────────────────────────────────────────┘| 维度 | MyBatis | Hibernate/JPA |
|---|---|---|
| 类型 | 半自动 ORM | 全自动 ORM |
| SQL 控制 | 完全掌控 | 自动生成 |
| 学习曲线 | 低 | 高 |
| 复杂查询 | 灵活 | 困难 |
| 性能调优 | 直观 | 复杂 |
| 适用场景 | 复杂 SQL、高并发 | 快速开发、简单 CRUD |