Skip to content

MyBatis 知识体系总览

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、延迟加载原理。

进入专题 →

🗄️ 一/二级缓存

高频 ⭐⭐⭐⭐⭐

覆盖:一级缓存作用域与失效时机、二级缓存开启配置、缓存命中条件、脏读风险与解决方案、与 Redis 的取舍。

进入专题 →

🔌 插件机制

高频 ⭐⭐⭐⭐

覆盖:Interceptor 接口与 @Intercepts 注解、拦截点四大对象、插件链执行顺序、PageHelper 分页原理、自定义插件实战。

进入专题 →

📝 动态 SQL

高频 ⭐⭐⭐⭐

覆盖:OGNL 表达式、if/choose/where/set/foreach/trim 标签原理、SQL 片段复用、动态 SQL 的 AST 解析机制。

进入专题 →


知识点初级面试中级面试高级面试
#与$ 区别✅ 必问✅ 必问✅ 必问
SQL 执行流程偶尔✅ 常问✅ 必问
Executor 类型❌ 少问✅ 常问✅ 必问
一级缓存✅ 常问✅ 常问✅ 必问
二级缓存脏读❌ 少问✅ 常问✅ 必问
插件原理❌ 少问偶尔✅ 必问
动态 SQL 原理偶尔✅ 常问✅ 必问
延迟加载原理❌ 少问偶尔✅ 常问

┌─────────────────────────────────────────────────┐
│ 应用层 │
│ Mapper 接口 → SqlSession → 业务代码 │
├─────────────────────────────────────────────────┤
│ 核心层 │
│ Configuration → MappedStatement → BoundSql │
│ Executor → StatementHandler → ResultSetHandler │
├─────────────────────────────────────────────────┤
│ 基础支撑层 │
│ 类型处理器 TypeHandler / 日志 / 缓存 / 插件链 │
├─────────────────────────────────────────────────┤
│ 数据源层 │
│ DataSource → Connection → JDBC / PreparedStmt │
└─────────────────────────────────────────────────┘

维度MyBatisHibernate/JPA
类型半自动 ORM全自动 ORM
SQL 控制完全掌控自动生成
学习曲线
复杂查询灵活困难
性能调优直观复杂
适用场景复杂 SQL、高并发快速开发、简单 CRUD