当前位置:   article > 正文

关于mybatis-plus的and和or问题_mybatisplus or连接

mybatisplus 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());
  • 1
  • 2
  • 3
  • 4
因为选用的框架会自动根据逻辑删除字段搜索所以拼接生成的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
  • 2
  • 3
  • 4
实际上并没有查到想要的数据,请教了别人发现括号优先级不对
正确的写法如下
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());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
这样写生成的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
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/158326
推荐阅读
相关标签
  

闽ICP备14008679号