正在阅读:
关于Mybatis plus QueryWrapper中 and or嵌套的一些问题
关于Mybatis plus QueryWrapper中 and or嵌套的一些问题
场景:
查询当前在职员工(退休留用,在职,试用)中,本年度和下一年度合同到期的员工列表,如,试用sql语句查询时,会写如下
select * from hr_info where status<>'离职' and (contract_end='2024' or contract_end='2025')
根据 QueryWrapper 中 and 和 or的使用说明
此时如果转换到 QueryWrapper 的话,可能会写成这样,如
queryWrapperContract.ne("status","离职").eq("contract_end","2024").or().eq("contract_end","2025");
运行程序后发现,得出的结果,2024年的是对的,不包含离职人员的,但是2025年度的,确包含了离职人员的信息;
那如果反过来,如下:
queryWrapperContract.eq("contract_end","2024").or().eq("contract_end","2025").ne("status","离职");
得出的结果正好和上述相反。
尝试使用 and() or() 做各种嵌套,好像也不能完全达成查询目标;
最后经过测试,其实需要改造下 ,变成如下:
queryWrapperContract.ne("status","离职").eq("contract_end","2024").or().eq("contract_end","2025").ne("status","离职");
以上公式对应的SQL语句其实是这样的:
select * from hr_info where (status<>'离职' and contract_end='2024') or (status<>'离职' contract_end='2025')
该日志由 bemender 于 2024年03月08日 发表
转载请注明文本地址:https://www.bemhome.com/post/197.html