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语句

进行测试,结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值