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
相关推荐
cxoptics15 分钟前
冰洲石分束器设计与应用
java
ck-joker29 分钟前
M1 Pro跑LLM实测:Ollama+LangChain4j零成本本地大模型开发,比云端API快在哪?
java·语言模型
丙氨酸長鏈1 小时前
[Bukkit插件开发]手持发射器箭矢机枪 教学文档 面向Python/C#开发者入门Java与Bukkit API
java·python·c#
Nontee1 小时前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛
java·数据库·设计模式
我是唐青枫1 小时前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java·开发语言
晨曦中的暮雨2 小时前
Virtual Thread 优化 Spring AI 阻塞式 LLM I/O:对照压测报告
java·并发·个人项目
AKA__Zas3 小时前
芝士算法(前缀和2.0)
java·数据结构·算法·leetcode·哈希算法·学习方法
caishenzhibiao3 小时前
降雨带波段点差 同花顺期货通指标
java·c语言·c#
七夜zippoe3 小时前
OpenClaw Prompt 工程:从角色设定到 Skill 封装的 Agent 输出质量方法论
java·服务器·prompt·openclaw·skill封装
rosmis3 小时前
agent各指标定义
android·java·开发语言