第2章 参数入:映射语句与参数装配


文档摘要

第 2 章 · 参数入:映射语句与参数装配 章节摘要:本章沿着手术台的入口走——接口方法的参数如何穿过 MyBatis 落到 SQL 上。四种映射语句是四类术式,井号占位是标准进针,美元拼接是特殊切口,多参数与主键回填是进阶手法,SQL 片段则是缝合线的标准库存放处。读完你能把"参数入"这一端的所有常规与非常规场景都处理干净。 一条主线 第 1 章末尾我们留了个尾巴:Mapper 代理在运行期被造出来之后,接口方法被调用时第一件事是什么?答案是装配参数。

第 2 章 · 参数入:映射语句与参数装配

章节摘要:本章沿着手术台的入口走——接口方法的参数如何穿过 MyBatis 落到 SQL 上。四种映射语句是四类术式,井号占位是标准进针,美元拼接是特殊切口,多参数与主键回填是进阶手法,SQL 片段则是缝合线的标准库存放处。读完你能把"参数入"这一端的所有常规与非常规场景都处理干净。

一条主线

第 1 章末尾我们留了个尾巴:Mapper 代理在运行期被造出来之后,接口方法被调用时第一件事是什么?答案是装配参数。方法签名里的 int id、User user、@Param 标注的多个参数,要变成 SQL 里可用的占位值,中间隔着一条完整的流水线:参数被包装成 Map、按名字取值、交给 TypeHandler 转成 JDBC 类型、塞进 PreparedStatement。

本章就沿着这条流水线走四站。1.1 站先把 select、insert、update、delete 四类术式完整过一遍,你会看到一台标准 CRUD 手术的全貌;1.2 站停下来辨析两种取参语法——井号是预编译进针,美元是文本拼接切口,后者只在列名、表名这类"不能预编译"的位置合法;1.3 站处理三个高频进阶场景:一个方法多个参数、插入后拿回自增主键、一次写入一批数据;1.4 站把重复的 SQL 收进片段库,让二十个查询共享同一套列清单与过滤条件。

参数入流水线

一句金句:井号把值当数据送进预编译通道,美元把值当代码拼进 SQL 文本——前者防注入,后者是打开的切口,只留给列名表名。

沿途站点

  • 2.1 四种映射语句的完整 CRUD 手术:select、insert、update、delete 的完整映射与调用,语句级属性表(parameterType、resultType、flushCache、timeout),返回受影响行数的约定。
  • 2.2 参数装配:井号与美元的分界线:两种占位在底层 PreparedStatement 与 Statement 的分野,一次 SQL 注入演示,美元符号仅有的几处合法位置与白名单防护。
  • 2.3 多参数、主键回填与批量插入:@Param 与参数对象两种多参数写法,useGeneratedKeys 与 selectKey 两种主键回填,foreach 拼值与 BATCH 执行器两种批量路线的取舍。
  • 2.4 SQL 片段与 include 复用:列清单片段、条件片段、带参数的 include,以及"什么时候不该抽象"的工程判断。

拐点与结论

本章的第一个认知转折在 2.2:井号与美元不是"功能相同的两种写法",而是两条完全不同的执行通道。看过注入演示之后,"为什么代码评审见美元就问"就不再是大惊小怪。

第二个转折在 2.3 的批量一节:foreach 拼一条超长 SQL 与 BATCH 执行器发一批预编译语句,是性能与风险都不同的两条路线,"批量插入"这三个字背后必须先问一句"多大的一批"。

读完你应该

  1. 能写出四种映射语句的完整定义,说出 insert、update、delete 的返回值是什么、怎么用
  2. 能说清井号占位从参数到 PreparedStatement 设值的全过程,以及美元拼接为什么不经过这条通道
  3. 能列出美元拼接的合法场景,并给动态排序列写一套白名单校验
  4. 能用 @Param 解决"Parameter not found",能解释不标注时参数为什么叫 param1
  5. 能分别用 useGeneratedKeys 和 selectKey 拿回主键,并说明两者的适用差异
  6. 能判断一批数据该走 foreach 还是 BATCH 执行器,说出各自的上限与风险
  7. 能把重复列清单与查询条件抽成 sql 片段并正确 include

下一章的接力

参数进了手术台,出口还空着。下一章转到"结果出":结果集的列怎么落到对象属性上,一对一、一对多的关联又怎么在不写 Java 组装代码的前提下缝合出完整的对象图。届时你会发现,入口端的很多习惯(比如随手 select 星号)会在出口端加倍还债。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U