mybatis LambdaQueryWrapper之复杂与或非sql逻辑编写

LambdaQueryWrapper可自动生成sql表达式,对于复杂情况,可参考以下写法:

java 复制代码
queryWrapper.and(true,wrapper->{
	wrapper.eq(true, EmployeeCheckPO::getCid, employeeCheckPO.getCid());
	wrapper.eq(StrUtil.isNotBlank(employeeCheckPO.getCheckMonth()), EmployeeCheckPO::getCheckMonth, employeeCheckPO.getCheckMonth());
	wrapper.like(StringUtils.isNotBlank(employeeCheckPO.getUsername()), EmployeeCheckPO::getUsername, employeeCheckPO.getUsername());
});
queryWrapper.and(true,wrapperNew->{
	wrapperNew.and(true,queryWrapper1->{
		queryWrapper1.eq(EmployeeCheckPO::getDelFlag, DelFlagEnum.N.getValue());
		queryWrapper1.eq(Objects.nonNull(employeeCheckPO.getCid()), EmployeeCheckPO::getCid, employeeCheckPO.getCid());
		queryWrapper1.eq(EmployeeCheckPO::getStatus,0);
		queryWrapper1.eq(EmployeeCheckPO::getUserId,employeeCheckPO.getUserId());
	})
			.or(true,queryWrapper2->{
				queryWrapper2.eq(EmployeeCheckPO::getDelFlag, DelFlagEnum.N.getValue());
				queryWrapper2.eq(Objects.nonNull(employeeCheckPO.getCid()), EmployeeCheckPO::getCid, employeeCheckPO.getCid());
				queryWrapper2.eq(EmployeeCheckPO::getStatus,1);
				queryWrapper2.eq(EmployeeCheckPO::getProcessSupervisorId,employeeCheckPO.getUserId());
			}).or(true,queryWrapper3->{
		queryWrapper3.eq(EmployeeCheckPO::getDelFlag, DelFlagEnum.N.getValue());
		queryWrapper3.eq(Objects.nonNull(employeeCheckPO.getCid()), EmployeeCheckPO::getCid, employeeCheckPO.getCid());
		queryWrapper3.eq(EmployeeCheckPO::getStatus,1);
		queryWrapper3.isNull(EmployeeCheckPO::getProcessSupervisorId);
		queryWrapper3.eq(EmployeeCheckPO::getProcessLeaderId,employeeCheckPO.getUserId());
	});
});
queryWrapper.orderByDesc(EmployeeCheckPO::getCheckMonth);
复制代码
上述sql逻辑解读为:wrapper集合 && (wrapperNew);
其中wrapperNew包括queryWrapper1 || queryWrapper2 || queryWrapper3
相关推荐
chools3 小时前
【AI超级智能体】快速搞懂工具调用Tool Calling 和 MCP协议
java·人工智能·学习·ai
李白你好3 小时前
TongWeb EJB 反序列化生成工具(Java-Chain 插件)
java·安全
U盘失踪了4 小时前
Java 的 JAR 是什么?
java·jar
数据库小组5 小时前
MySQL 删库后怎么恢复?binlog2sql 之外,NineData 还能做什么
数据库·sql·mysql·安全·数据·ninedata·删库
今天又在写代码5 小时前
java-v2
java·开发语言
competes5 小时前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql
2501_913061346 小时前
网络原理知识
java·网络
希望永不加班6 小时前
Spring AOP 代理模式:CGLIB 与 JDK 动态代理区别
java·开发语言·后端·spring·代理模式
flushmeteor7 小时前
java的动态代理和字节码生成技术
java·动态代理·代理·字节码生成
eggwyw7 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring