framework
framework/mybatis/index.md
medium
framework-mybatis-index
MyBatis + Mapper XML 设计规范 6 项 — 接口约定 / XML 设计 / 动态 SQL / 注入安全 / 分页 / N+1。Use when 写 Mapper 接口或 XML / 排查 SQL 注入与慢查询 / 评审 MyBatis 持久层 PR 时。
子项索引
| 子项 | 一句话 |
|---|---|
| mybatis-mapper-interface skill | MyBatis Mapper 接口规范 — @Mapper / @MapperScan 注册、方法名语义化、多参数加 @Param、返回类型约定 |
| mybatis-xml-design skill | MyBatis Mapper XML 设计 — namespace 对应接口全限定名、resultMap 显式映射不靠隐式驼峰、sql 片段 + include 复用列名 |
| mybatis-dynamic-sql skill | MyBatis 动态 SQL 标签 — if 条件拼接、where 自动去 AND/OR 前缀、foreach 批量插入与 IN、choose 多分支 |
| mybatis-sql-injection-safety skill | MyBatis 防 SQL 注入红线 — #{} 走预编译占位符,${} 是字符串拼接仅用于表名/列名等无法占位处且必须白名单校验 |
| mybatis-pagination skill | MyBatis 物理分页 — PageHelper.startPage 或 MyBatis-Plus IPage 下推 limit,禁 RowBounds 全查内存分页,count 查询单独优化 |
| mybatis-n-plus-one skill | MyBatis N+1 查询问题 — association/collection 嵌套查询的 fetchType、嵌套 resultMap 一次 join vs 多次查、批量查替代循环单查 |
MyBatis · 子项索引
MyBatis 持久层拆成 6 个独立决策点,按你正在做的事下钻:
| 你在做什么 | 进哪个 |
|---|---|
| 写 Mapper 接口(注解扫描、方法名、多参数、返回类型) | mapper-interface |
| 写 Mapper XML(namespace、resultMap、sql 片段复用) | xml-design |
| 写动态 SQL(条件拼接 / 批量 / 多分支) | dynamic-sql |
拼 SQL 时纠结用 #{} 还是 ${}(防注入) |
sql-injection-safety |
| 做分页查询(物理分页 / count 优化) | pagination |
| 列表带关联数据、循环里反复查库(慢) | n-plus-one |