赞
踩
1.想要实现的sql语句:
筛选条件有3个日期区间,日期之间是or的关系,整体是和外部的条件是and的关系。相对比较复杂,有嵌套的逻辑,没有办法顺序写OR或者AND。
SELECT * FROM table_name WHERE id = ? AND ( (date1 > ? AND date1 < ?) OR (date2 > ? AND date2 < ?) OR (date3 > ? AND date3 < ?) )
2. 用Mybatis-Plus的LambdaQueryWrapper<>()实现
因为需求中可能涉及到传入的日期筛选参数为空,所以需要做条件判空,因此使用的是 LambdaQueryWrapper.func()方法。
三组日期之间用or去连接,和外部的用and连接。
- queryWrapper.and(wrapper -> wrapper
- .or().or(
- wrapper_1 -> wrapper_1.func(i -> {
- if (Objects.nonNull(date1)) {
- i.ge(ModelToInsert::getDate1, date1);
- }
- }).func(j -> {
- if (Objects.nonNull(date2)) {
- j.le(ModelToInsert::getD
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。