动态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的属性值属性的名称

第四步:测试代码

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

  1. 动态SQL之foreach标签(批量删除)

    动态SQL之foreach标签(批量删除) foreach标签的属性 collection:设置要循环的数组或集合 item:用一个字符串表示数组或集合中的每一个数据 separator:设置每次循环 ...

  2. MyBatis——动态SQL语句——if标签和where标签复合使用

    功能需求 根据性别和名字查询用户 官方文档 MyBatis--动态 SQL SQL语句 SELECT id, username, birthday, sex, address FROM `user` ...

  3. mybatis中动态sql常用的标签

    用来循环容器的标签forEach,查看例子 //mapper中我们要为这个方法传递的是一个容器,将容器中的元素一个一个的 //拼接到xml的方法中就要使用这个forEach这个标签了 public L ...

  4. mybatis动态sql中where标签的使用

    where标记的作用类似于动态sql中的set标记,他的作用主要是用来简化sql语句中where条件判断的书写的,如下所示: <select id="selectByParams&qu ...

  5. SpringBoot集成Groovy、Mybatis注解 实现动态SQL,帮你摆脱繁琐的XML配置

    SpringBoot的超简洁配置,为我们省去了宝贵的配置时间. Mybatis3在这方面也提供了很好的支持,通过注解让我们摆脱了繁琐的mapper xml,写DAO层的时候再也不用在java接口和xm ...

  6. mybatis(18)——动态sql,where标签去掉多余的and和or

    1.不使用where标签可能会出现的问题 <select id="getStudents" resultType="student" parameterT ...

  7. 动态SQL中if标签:test判断的null和“ “的问题

    1.区别 <if test='studentName!=null'> 前端传入json {  "studentName":"程" , "t ...

  8. Mybatis学习笔记13 - 动态sql之set标签

    示例代码: 接口定义: package com.mybatis.dao;import com.mybatis.bean.Employee;public interface EmployeeMapper ...

  9. mybaitis动态sql利用bind标签代替%拼接完成模糊查询

    Oracle中使用bind的写法 <select id="selectUser" resultType="user" parameterType=&quo ...

最新文章

  1. 少年郎,你为什么没有对象?是缺点“土味情话”
  2. 鸿蒙os内测版应用名称,鸿蒙OS2.0发布,只有两款机型可以申请内测
  3. 未来人工智能客户服务的5大优势
  4. linux nexus bulid
  5. ANSYS Motion 2020 R2中文版
  6. 用js实现统计字符串里面的出现次数最多的字符
  7. java字符排序规则_java 重写排序规则,用于代码层级排序
  8. leetcode 496, 503, 556. Next Greater Element I, II, III | 496, 503, 556. 下一个更大元素 I,II,III(单调栈)
  9. Python面试题总结(8)--操作类
  10. linux下日志晒选打包,Linux 文件日志筛选操作
  11. python 修行之路(1-自我介绍及python环境的搭建)
  12. 微博api unexpected response status: 403_抖音直播监控Api:开播查询
  13. 后端代码增删改查的编写~
  14. HDU - 3533 Escape
  15. ones,zeros,size用法总结
  16. 解决eclipse在安装时工作空间出错问题的有效方法
  17. Linux下RTL8723BE无线网卡驱动问题解决方法
  18. 设计思维从1到100
  19. 【游戏设计笔记】游戏开发团队
  20. 概率分布详解 Bernoulli、Binomial、Beta

热门文章

  1. redis 系列17 持久化 AOF
  2. linux操作-centos下载mysql
  3. python web开发,organization的model设计
  4. 鼠标移入时闪闪发光的效果
  5. HTTP协议学习随笔
  6. android webview js交互 第一节 (java和js交互)
  7. Azure IoT Hub入门 - 接口介绍
  8. 252.Meeting Rooms
  9. 【项目经验】--EasyUI DataGrid之右键菜单
  10. asp.net如何抓取其他网站的内容