关于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')


qrcode