当前位置: 首页 > news >正文

MyBatis进阶干货知识

#{}和${}

#{}:预编译SQL,占位的方式

${}:即使SQL,直接拼接

⭐一般不使用${},是为了防止SQL注入问题

1、#{}和${}的用法

我们可以以降序查询的例子来看结果

1、#{}降序排序

以List<InfoXml>来当返回值

写SQL语句

进行测试,结果如下:

⭐如果我们以#{}进行降序排序,会显示错误,因为#{}使预编译的,自动带""

2、${}降序排序

以List<InfoXml>来当返回值

写SQL语句

进行测试,结果如下:

⭐我们以${}进行降序排序,代码反而是可以通过的,因为${}是即时SQL,直接拼接的,不会带""

2、#{}和${}的区别

  1. #{}:预编译处理, ${}:字符直接替换
  2. #{} 可以防⽌SQL注⼊, ${}存在SQL注⼊的⻛险, 查询语句中, 可以使⽤ #{} ,推荐使⽤ #{}
  3. 但是⼀些场景, #{} 不能完成, ⽐如 排序功能, 表名, 字段名作为参数时, 这些情况需要使⽤${}
  4. 模糊查询虽然${}可以完成, 但因为存在SQL注⼊的问题,所以通常使⽤mysql内置函数concat来完成

标签

<if>标签

以List<InfoXml>来当返回值

写SQL语句

进行测试,结果如下:

<trim>标签

  1. prefix:表⽰整个语句块,以prefix的值作为前缀
  2. suffix:表⽰整个语句块,以suffix的值作为后缀
  3. prefixOverrides:表⽰整个语句块要去除掉的前缀
  4. suffixOverrides:表⽰整个语句块要去除掉的后缀

以List<InfoXml>来当返回值

写SQL语句

进行测试,结果如下:

<where>标签

以List<InfoXml>来当返回值

写SQL语句

进行测试,结果如下:

<foreach>标签

  1. collection:绑定⽅法参数中的集合,如 List,Set,Map或数组对象
  2. item:遍历时的每⼀个对象
  3. open:语句块开头的字符串
  4. close:语句块结束的字符串
  5. separator:每次遍历之间间隔的字符串

以List<InfoXml>来当返回值

写SQL语句

进行测试,结果如下:

<include>标签

在xml映射⽂件中配置的SQL,有时可能会存在很多重复的⽚段,此时就会存在很多冗余的代码

我们可以对重复的代码⽚段进⾏抽取,将其通过 <sql> 标签封装到⼀个SQL⽚段,然后再通过

<include> 标签进⾏引⽤

  1. <sql> :定义可重⽤的SQL⽚段
  2. <include> :通过属性refid,指定包含的SQL⽚段

以Integer来当返回值

写SQL语句

进行测试,结果如下:

相关文章:

  • 海康相机连接测试-极简版
  • K8s CoreDNS 核心知识点总结
  • AI 来袭:颠覆传统的数字营销指南
  • 我用 CodeBuddy 开发了一个颜色命名搜索器 —— ColorNameHub 的诞生记
  • Verilog HDL 语言整理
  • [特殊字符] 如何优雅地避免 SQL 多表 LEFT JOIN 造成的笛卡尔积放大问题?
  • 青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块
  • C# RSA加密
  • 日语简单记录
  • 基于大模型预测的脑出血全流程诊疗技术方案
  • 服务器性能参数分析基础:磁盘-CPU-内存
  • ci/cd全流程实操
  • MySQL 8.0 OCP 1Z0-908 121-130题
  • ConcurrentSkipListMap的深入学习
  • 前端方法的总结及记录
  • 使用DDR4控制器实现多通道数据读写(十二)
  • (7)python开发经验
  • ‌PowerShell脚本激活法激活IDM
  • 傅里叶变换实战:图像去噪与边缘提取
  • 2025蓝桥杯JAVA编程题练习Day8
  • 海昏侯博物馆展览上新,“西汉帝陵文化展”将持续展出3个月
  • 外交部部长助理兼礼宾司司长洪磊接受美国新任驻华大使递交国书副本
  • 特朗普再提“接管”加沙,要将其变为“自由区”
  • 一图看懂|印巴交火后,双方基地受损多少?
  • 证券日报:降准今日正式落地,年内或还有降准空间
  • 乌总统:若与普京会谈,全面停火和交换战俘是主要议题