Mybatis中$ {} 和 # {}的区别,动态SQL之if、where、set、trim、foreach标签的使用

简介: Mybatis中$ {} 和 # {}的区别,动态SQL之if、where、set、trim、foreach标签的使用

一.Mapper文件的补充细节

a) Xml的特殊字符

在mapper文件中,小于号用& lt;代替, 大于号用 & gt;代替

i.  <   &lt;  
ii. >  &gt; 

b) $ {} 和 # {}的区别

i. 使用上,$ {}要获取的参数值,对应的参数必须使用Param注解

ii. 底层上,

${}使用字符串拼接

#{}使用?占位符

  1. 字符串拼接,可以拼接表名 列名 sql关键字
  2. ?占位符,只能绑定数据,但可以避免sql注入攻击

二.动态SQL

什么是动态SQL?就是能够根据不同的条件,产生不同 的SQL语句。


比如我们常见的多条件搜索框,可以根据姓名、性别、年龄、工资范围等按照一定的条件进行搜素,

但如果我只输入姓名搜素呢,或者按照姓名+年龄进行搜素呢,这样排列组合情况就太多了,我们不可能一个条件去写一个SQL的,

所以就需要我们根据用户输入的条件来动态的生成一条SQL语句。


Mapper文件中动态SQL常用的几个标签

< if> 作用:

满足条件时执行sql,不满足则不执行

< where> 作用:

  1. 会自动删除if动态sql产生的多余的and or前缀
  2. 会在if动态sql语句前添加where关键字


如下SQL语句所示:

< set>作用:
1.会自动if动态sql产生的多余的逗号后缀
2.会在if动态sql语句前添加set关键字

< trim>作用:
可以自定义前缀和后缀:

< foreach> 循环遍历,
常用来做批量删除的时候用

如下图所示:

collection:相当于集合名,

item表示集合中的一个元素,

open是循环之前要加的东西,

close是循环结束的时候要加的东西,

separator:元素间使用什么分隔。

目录
相关文章
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
784 1
|
存储 JavaScript 前端开发
Set中的add()方法和数组的push()方法有什么区别?
Set中的add()方法和数组的push()方法有什么区别?
654 122
|
SQL 数据库 数据安全/隐私保护
SQL查询优化:where子句的高效使用方式
总的来说,如果将 SQL 查询比喻为一个乐团的演奏,WHERE 子句就像是独奏者,它需要各位乐手的协助,才能发挥出最美妙的音乐。计划好你的演奏,挑选对的音符,在最适当的时间开始演奏,那么,你可以更高效地运用 SQL 查询,更好地把握数据的篇章。
387 19
|
SQL 数据库 数据安全/隐私保护
SQL查询优化:where子句的高效使用方式。
总的来说,如果将 SQL 查询比喻为一个乐团的演奏,WHERE 子句就像是独奏者,它需要各位乐手的协助,才能发挥出最美妙的音乐。计划好你的演奏,挑选对的音符,在最适当的时间开始演奏,那么,你可以更高效地运用 SQL 查询,更好地把握数据的篇章。
253 13
|
存储 编译器 容器
set、map、multiset、multimap的介绍及使用以及区别,注意事项
set是按照一定次序存储元素的容器,使用set的迭代器遍历set中的元素,可以得到有序序列。set当中存储元素的value都是唯一的,不可以重复,因此可以使用set进行去重。set默认是升序的,但是其内部默认不是按照大于比较,而是按照小于比较。set中的元素不能被修改,因为set在底层是用二叉搜索树来实现的,若是对二叉搜索树当中某个结点的值进行了修改,那么这棵树将不再是二叉搜索树。
485 0
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
SQL 关系型数据库 MySQL
惊呆:where 1=1 可能严重影响性能,差了10多倍,快去排查你的 sql
老架构师尼恩在读者交流群中分享了关于MySQL中“where 1=1”条件的性能影响及其解决方案。该条件在动态SQL中常用,但可能在无真实条件时导致全表扫描,严重影响性能。尼恩建议通过其他条件或SQL子句命中索引,或使用MyBatis的`&lt;where&gt;`标签来避免性能问题。他还提供了详细的执行计划分析和优化建议,帮助大家在面试中展示深厚的技术功底,赢得面试官的青睐。更多内容可参考《尼恩Java面试宝典PDF》。
|
存储 JavaScript 前端开发
Set、Map、WeakSet 和 WeakMap 的区别
在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。
|
SQL XML Java
Mybatis的<where>,<if>等标签用法
这篇文章详细解释了Mybatis中<where>和<if>等标签的用法,展示了如何在SQL动态构建中有效地过滤条件和处理逻辑分支。
1283 1