动态sql之各种标签的使用以及详细配置

动态sql

在一个复杂得业务逻辑的背景下,比如一个电商网站

​ 在一个手机表中,可能需要按照品牌,型号,颜色,内存等多个属性对手机表进行查找,如果对一个属性写一个查询方法,那么代码将会非常复杂,所以我们思考:有没有一种可能只写一种方法就可以查询出来业务。那么他来了-----动态SQL

一、Where和if标签

需求:查询user表的数据。多个条件无脑组合

第一步:定义接口,接口中添加查询方法

在这里插入图片描述

**注意:**定义方法时要考虑返回值与输入参数

第二步:映射文件中添加方法实现配置
在这里插入图片描述

使用if标签对条件做出判断
<if test="id!=null">
	id=#{id}
</if>
If(id!=null){ id=#{id}}

上述解决方案中存在where 1=1的无意义sql,使用Where标签解决1=1的问题

在这里插入图片描述

注意:if标签做条件判断,test属性中添加判断添加,多条件时使用and拼接where标签帮我们解决了1=1问题的同时,还可以帮助我们去掉第一个and

二、Set标签

需求:修改person信息,传什么改什么

第一步:接口中添加修改方法

在这里插入图片描述

第二步:映射文件中添加实现

在这里插入图片描述

**注意:**set标签可以帮助我们解决最后一个逗号的问题

三、trim标签

3.1重写set标签

在这里插入图片描述

**prefix:**前缀,在执行trim标签内语句时,在前面拼接的值(set)

**SuffixOverrides:**忽略后缀,在执行trim标签内语句时,在最后忽略的值(,)

3.2重写Where标签

在这里插入图片描述

PrefixOverrides:忽略前缀(and/or)

Suffix:后缀(加上where)

四、choose标签

需求:如果有用户的id,使用id查询,如果没有id,看是否有那么,按name模糊查询,如果都没有,按照地址模糊查,如果地址没有,查询全部

第一步:定义接口方法

在这里插入图片描述

第二步:映射文件中添加方法实现

在这里插入图片描述

注意:

Choose:表示单选,标签下的条件只选择一个执行
Choose相当于switch语句
When标签相当于case语句
Otherwise标签相当于default语句

五、foreach标签

foreach标签主要是用来做数据的循环遍历

例如:select * from person where id in(4,5,6)在这样的语句中,需要根据一个集合或者一个数组传入的参数进行查询。

Case 1:使用集合传入用户需要查询的值

第一步:接口中定义方法
在这里插入图片描述
使用集合接收传过来的id串

第二步:映射文件中添加方法的实现配置
在这里插入图片描述
​ 注意:

Foreach标签:用于遍历集合/数组

Collection属性:代表要遍历的集合元素,如果遍历的是集合,属性值可以是collection,也可以是list

Open属性:代表语句的开始部分(前缀)

Close属性:代表结束部分(后缀)

Item属性:代表遍历集合的每个元素,生成的变量名,取名要做到见名知意。

Separator属性:代表分隔符

第三步:测试代码
在这里插入图片描述

Case 2:使用数组传入用户查询需要的id

第一步:接口方法
在这里插入图片描述
第二步:映射文件
在这里插入图片描述
注意:使用foreach遍历 数组时,collection属性值为array

case 3:pojo对象集合属性传入用户需要查询的id

第一步:创建一个查询对象QueryVO(补充查询条件)

在这里插入图片描述

第二步:定义接口方法

在这里插入图片描述

第三步:添加映射

在这里插入图片描述

​ 注意:

​ 当foreach遍历的是pojo的集合属性或者数组属性时,collection的属性值属性的名称

第四步:测试代码

第三步:添加映射**

[外链图片转存中…(img-xUKhckcg-1593526500513)]

​ 注意:

​ 当foreach遍历的是pojo的集合属性或者数组属性时,collection的属性值属性的名称

第四步:测试代码在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章