导语:这一篇补上 MyBatis 面试的"最后一公里"——结果映射怎么把
ResultSet变成对象(resultMap/autoMappingBehavior/TypeHandler在ResultSetHandler里的落地)、一对一/一对多的两种写法与 N+1 问题、延迟加载的代理原理与三个真实事故级坑(含"Session 关闭后访问"到底抛什么异常),最后回到选型视角:MyBatis 为什么叫半自动 ORM、与 Hibernate 怎么选、与 Spring 是怎么整合的,共 12 题。
2026/7/24大约 15 分钟
导语:这一篇讲 MyBatis 的"可扩展性"与"骨架"。插件部分要说清:为什么只能拦截四大接口、JDK 动态代理 + 责任链是怎么串起来的、分页插件为什么能做到物理分页、PageHelper 的 count 与深分页怎么优化;骨架部分要能一口气说出 SqlSessionFactory → SqlSession → Executor → StatementHandler → ResultSetHandler 的完整链路,以及 Mapper 接口没有实现类却能调用的原因(JDK 动态代理 +
MapperRegistry),共 13 题。
2026/7/23大约 18 分钟
导语:缓存是 MyBatis 面试区分度最高的一章——一级缓存的失效场景、
CacheKey的组成、二级缓存为什么"不提交读不到"、装饰器链的层层包装,答不出细节就只能停在"有两级缓存"。本篇再往下扎一层:Executor 三种类型的取舍、BatchExecutor的两个硬伤、批量插入的性能真相(rewriteBatchedStatements),最后把 Executor → CachingExecutor → LocalCache 的调用链串起来,共 12 题。
2026/7/22大约 15 分钟
导语:MyBatis 的第一层考点是「SQL 安全」——
#{}与${}的区别能背,但能讲清"预编译为什么能防注入"、${}到底什么时候非用不可、怎么把它用安全,才算过关。第二层是「参数绑定」——多参、自增主键、jdbcType/TypeHandler这些"一用就出错"的细节。第三层是「动态 SQL」——foreach/where/set/trim/bind/sql-include的用法与底层SqlNode原理,共 13 题。
2026/7/21大约 14 分钟
