关于mybatis-plus的and和or问题

关于mybatis-plus条件构造器的and和or的拼接问题

sql 语句里and和or是有执行优先级的

mybatis-plus 提供的条件构造器但有时需要复杂嵌套写法的时候不能直接拼接

代码如下 (当个例子就好,为了可读性删了很多东西)
LambdaQueryWrapper<Report> wrapper = new LambdaQueryWrapper(reportQuery);
wrapper.ne(Report::getPeopleCounts, 0).or().ne(Report::getRemark, ""));
wrapper.ge(Report::getCreateTime,report.getStartDate())
    .lt(Report::getCreateTime, report.getEndDate());
因为选用的框架会自动根据逻辑删除字段搜索所以拼接生成的sql如下
SELECT * FROM tb_report WHERE is_deleted =0 AND (
 people_counts>0 OR remark !='' 
 AND create_time>='2022-10-18 12:00:00' 
 AND create_time<'2022-10-20 12:00:00')
实际上并没有查到想要的数据,请教了别人发现括号优先级不对
正确的写法如下
LambdaQueryWrapper<Report> wrapper = new LambdaQueryWrapper(reportQuery);

wrapper.and(exportWrapper->exportWrapper.ne(Report::getPeopleCounts,0).or().ne(Report::getRemark, ""));

wrapper.ge(Report::getCreateTime,report.getStartDate())
    .lt(Report::getCreateTime, report.getEndDate());
这样写生成的sql如下
SELECT * FROM tb_report WHERE is_deleted =0 AND (
(people_counts>0 OR remark !='') 
 AND create_time>='2022-10-18 12:00:00' 
 AND create_time<'2022-10-20 12:00:00')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值