springboot mybatis plus 固定查询条件及可选查询条件的组合查询,使用QueryWrapper.and()来解决。

1、我们在写查询SQL的时候,经常会碰到,比如,同一个类别下的某一个编号的物料信息,或者是同一批次的物料库存问题等等。

|---------|----------|----------|
| 所属类别fid | 物料编号bm | 物料批次pc |
| 1 | 10.01.02 | 20240807 |
| 1 | 10.01.03 | 20240807 |
| 2 | 10.02.01 | 20240805 |

2、那么我们要查询fid=1下面的可选条件bm=10.01.02或者pc=20240807的

那么我们的where fid=1 and (bm='10.01.02' or pc='20240807')

3、有二种方法实现,一种是直接sql,然后判断去处理就行,另一种是用QueryWrapper来直接写,这里我们用QueryWrapper实现:

复制代码
QueryWrapper<Materials> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(materials.getFid() != null, "fid", materials.getFid());

上面是固定的条件,那么可选条件的:

复制代码
queryWrapper.and(query -> query.like(materials.getBm()!=null, "bm", materials.getBm()).or().
 like(materials.getPc()!=null, "pc", materials.getPc()));

4、通过上面的编写,我们就可以实现where fid=1 and (bm='10.01.02' or pc='20240807')的效果,也就是queryWrapper.and()来编写就可以了,这个会在在where + and (多个条件)。

5、然后实际开发中,并不是这么简单,会有这种情况,有多个条件,而且查询条件有些复杂的情况,比如下面的图中的实现:

那么在后端的代码编写,就不可以直接通过字段来一个一个的判断加入了。

6、对于动态的字段,及取值的情况我们可以这么写:

复制代码
queryWrapper.and((wrapper) -> {
				dynamicConditions.entrySet().stream().forEach((entry) -> {
					wrapper.or().like(entry.getKey(), entry.getValue());
				});
			});

说明:dynamicConditions:这个是HashMap<String,Object>;

这样,我们就可以动态的处理,而且是成功实现了。

相关推荐
爱吃烤鸡翅的酸菜鱼1 天前
【RabbitMQ】发布订阅架构深度实践:构建高可用异步消息处理系统
java·spring boot·分布式·后端·websocket·架构·rabbitmq
回家路上绕了弯1 天前
JVM 调参实战指南:从基础到落地,解决 GC 与内存难题
分布式·后端
陈逸轩*^_^*1 天前
RabbitMQ 常见八股:包括组成部分、消息的相关处理、持久化和集群等。
后端·消息队列·rabbitmq
VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue房屋租赁管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
A-程序设计1 天前
基于Django短视频推荐系统设计与实现-(源码+LW+可部署)
后端·python·django
古城小栈1 天前
Go中 巧妙解决 同主版本多子版本共存
后端·golang
心灵宝贝1 天前
sw_64架构 docker-ce-cli rpm 安装方法(附安装包)
后端·spring·spring cloud
IT_陈寒1 天前
Redis性能翻倍的5个冷门技巧:从缓存穿透到集群优化实战指南
前端·人工智能·后端
李慕婉学姐1 天前
基于微信小程序的康复医疗问诊服务平台5855qb95(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·微信小程序
聆风吟º1 天前
【Spring Boot 报错已解决】Spring Boot接口报错 “No converter found” 解决手册
java·spring boot·后端