在一个复杂得业务逻辑的背景下,比如一个电商网站
在一个手机表中,可能需要按照品牌,型号,颜色,内存等多个属性对手机表进行查找,如果对一个属性写一个查询方法,那么代码将会非常复杂,所以我们思考:有没有一种可能只写一种方法就可以查询出来业务。那么他来了-----动态SQL
需求:查询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
需求:修改person信息,传什么改什么
第一步:接口中添加修改方法
第二步:映射文件中添加实现
**注意:**set标签可以帮助我们解决最后一个逗号的问题
**prefix:**前缀,在执行trim标签内语句时,在前面拼接的值(set)
**SuffixOverrides:**忽略后缀,在执行trim标签内语句时,在最后忽略的值(,)
PrefixOverrides:忽略前缀(and/or)
Suffix:后缀(加上where)
需求:如果有用户的id,使用id查询,如果没有id,看是否有那么,按name模糊查询,如果都没有,按照地址模糊查,如果地址没有,查询全部
第一步:定义接口方法
第二步:映射文件中添加方法实现
注意:
Choose:表示单选,标签下的条件只选择一个执行 Choose相当于switch语句 When标签相当于case语句 Otherwise标签相当于default语句foreach标签主要是用来做数据的循环遍历
例如:select * from person where id in(4,5,6)在这样的语句中,需要根据一个集合或者一个数组传入的参数进行查询。
第一步:接口中定义方法 使用集合接收传过来的id串。
第二步:映射文件中添加方法的实现配置 注意:
Foreach标签:用于遍历集合/数组
Collection属性:代表要遍历的集合元素,如果遍历的是集合,属性值可以是collection,也可以是list
Open属性:代表语句的开始部分(前缀)
Close属性:代表结束部分(后缀)
Item属性:代表遍历集合的每个元素,生成的变量名,取名要做到见名知意。
Separator属性:代表分隔符
第三步:测试代码
第一步:接口方法 第二步:映射文件 注意:使用foreach遍历 数组时,collection属性值为array
第一步:创建一个查询对象QueryVO(补充查询条件)
第二步:定义接口方法
第三步:添加映射
注意:
当foreach遍历的是pojo的集合属性或者数组属性时,collection的属性值为属性的名称
第四步:测试代码
第三步:添加映射**
[外链图片转存中…(img-xUKhckcg-1593526500513)]
注意:
当foreach遍历的是pojo的集合属性或者数组属性时,collection的属性值为属性的名称
第四步:测试代码