MyBatis
持久层框架与 MyBatis-Plus:动态 SQL、结果映射、插件机制与工程实践
- 001入门从 JDBC 到 MyBatis:把体力活交出去,把 SQL 留在手里以「按状态、关键词、时间段任意组合查订单,裸 JDBC 要抄多少遍样板」引入:七项体力税清单、全自动 ORM 与半自动 MyBatis 两条进化路线对照、三层塔心智模型与选型决策表,附本模块四阶段学习地图。
- 002中级快速上手:一个没有实现类的接口,凭什么能查数据库以「Mapper 接口只有方法签名,mapper.selectById(1) 却查回了对象」的魔术引入:Spring Boot 集成最小工程、注解 CRUD 五连、参数传递四条路、#{} 与 ${} 的注入对照实验、主键回填,附 MapperProxy 原理图与三个排错实录。
- 003入门核心配置与运行时生命周期mybatis-config.xml 关键配置、与 Spring Boot 配置的对应关系、SqlSessionFactory/SqlSession/Mapper 的生命周期与线程安全
- 004中级动态 SQL:让 SQL 随条件生长,而不是被字符串拼接以「商品列表 8 个筛选项任意组合,手拼 SQL 的三宗罪」引入:if、where、choose、set、foreach、sql 与 trim 逐个拆解,0 值被吞与空集合 IN () 两大经典坑,附 6 条件开合实验与打印 SQL 对照。
- 005进阶结果映射与关联查询:一行拆成两个对象,多行合成一个对象以「驼峰开关救得了字段名,救不了订单与下单用户的结构变换」引入:resultMap 的 id 去重原理、association 与 collection 的嵌套结果与嵌套查询对照、延迟加载与 session 生命周期,附 N+1 数 SQL 实验与分页 join 明细错乱的独家拆解。
- 006入门TypeHandler 与类型转换内置 TypeHandler 映射、自定义枚举/JSON/时间 handler、注册方式与 resultMap 配合
- 007进阶一级与二级缓存:口袋、书架与失效的边界以「本地连查两次只打一次库、上线后却每次都打库」的薛定谔体验引入:一级缓存的命中条件与 Spring 会话生命周期、二级缓存三件套与命中顺序、跨 namespace 关联失效的脏读推演,附两个数 SQL 实验与「为什么大厂禁用二级缓存」的工程结论。
- 008进阶插件与拦截器:一处织入,全局生效以「200 个 Mapper 要统一加慢 SQL 日志、分页与执行监控」引入:四大对象的动态代理洋葱模型、@Signature 三元组、手写慢 SQL 计时插件、分页插件先 count 再改写 LIMIT 的两段式原理,附 PageHelper ThreadLocal 污染事故复盘与多插件顺序实验。
- 009中级MyBatis-Plus 单表 CRUD:免掉六成体力活,不动 SQL 主权以「每张表五套 XML 的单表体力税」引入:只做增强不做改变的定位、注解三件套与 IdType 选型表、BaseMapper 单表五连、LambdaQueryWrapper 的编译期列名检查与 condition 动态条件,附零 XML 跑通单表与动态条件 SQL 对照两个实验。
- 010进阶MyBatis-Plus 进阶:分页、乐观锁、逻辑删除、自动填充四件套以「列表页分页、并发扣库存超卖、软删除、审计字段四大企业刚需」引入:MybatisPlusInterceptor 插件总线与官方添加顺序、PaginationInnerInterceptor 含自定义 XML 分页、@Version 乐观锁冲突与重试实验、@TableLogic 的唯一索引冲突三坑、MetaObjectHandler 审计填充,附 FastAutoGenerator 代码生成与四件套逐项验证实验。
- 011进阶慢查询病历本:N+1、批量写、select * 与深分页四大事故现场以「开发环境百条数据流畅、上线一周列表页 8 秒超时」引入:N+1 的两种来源与解法矩阵、foreach 巨型 SQL 与 ExecutorType.BATCH 的对决、select * 的三重隐税与列裁剪、深分页两招,附数 SQL 条数与批量写耗时对比两个实验,收束于先量再改的排查纪律。
- 012进阶收官实战:电商订单持久层,从三张表到上线验收以「下单、查询、取消超时单这条电商主干链路」引入:三表设计与状态机、下单事务边界与防超卖双方案选型、列表与详情的无 N+1 查询、定时取消与幂等兜底,附 Testcontainers 三用例与十项验收清单,收官串联 010-090 十篇零件。