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
相关推荐
TE-茶叶蛋13 小时前
深入研究 yudao-framework 模块:Java 编程能力提升指南
java·开发语言
逻辑驱动的ken13 小时前
Java高频考点场景题24
java·开发语言·面试·职场和发展·求职招聘
兔小盈13 小时前
多线程-(五)线程安全之内存可见性
java·开发语言·多线程
阿里云大数据AI技术13 小时前
一条 SQL 生成广告:Hologres 如何实现素材生成到投放分析一体化
人工智能·sql
CeshirenTester13 小时前
LangChain的工具调用 vs 原生Skill API:性能差在哪儿?
java·人工智能·langchain
yaoxin52112313 小时前
400. Java 文件操作基础 - 使用 Buffered Stream I/O 读取文本文件
java·开发语言·python
Fox爱分享13 小时前
字节二面:10亿数据毫秒级查手机尾号后4位,答不出“异构索引”直接挂?
java·后端·面试
61900833614 小时前
win idea 控制台中文乱码
java·ide·intellij-idea
折哥的程序人生 · 物流技术专研14 小时前
《Java面试85题图解版(二)》进阶深化上篇:并发编程 + JVM
java·开发语言·后端·面试
abcnull14 小时前
用ASM做精准测试(Java)
java·jar·asm·字节码·精准测试