mybatis-plus循环处理多个条件的 or 查询

我们一般用 mybatis-plus 的提供的 api 接口处理 List、Set 作为条件查询的时候,都会使用 in,例如 (Student 类省略 没啥好些的):

LambdaQueryWrapper<Student> queryWrapper = 
new QueryWrapper<Student>().lambda()
.in(Student::getName, nameList);

List<Student> studentList = StudentService.list(queryWrapper);
          

这个 nameList 其实可以是 Collection 的子类,我们一般会使用 String、Integer等这些常用的类或者包装类,但是当有一种很少见的场景出现的时候,就不可以满足了,比如
我要查询 满足 14岁,姓名为张三,或者15岁,姓名为王五的学生,多条件就不能直接扔到 in 中了,一般是自己写 sql,但是如果是条件很多或者条件不够确定,写 sql 就没那么灵活了,后来想到了一种写法:

List<Query> queryList = new ArrayList<>();
Query query1 = new Query();
query1 .setAge(14);
query1 .setName("张三");

Query query2 = new Query();
query2.setAge(15);
query2.setName("王五");

queryList.add(query1);
queryList.add(query2);

LambdaQueryWrapper<Student> queryWrapper = new QueryWrapper<Student>()
                .lambda()
                .eq(EqpSMaintainTaskExecutor::getGroup, "一班")
                .and(qw -> {
                    queryList.forEach(query-> {
                        qw.or(qw1 -> {
                            qw1.eq(Student::getAge, query.getAge())
                               .eq(Student::getName, course.getName()));
                            return qw1;
                        });
                    });
                    return qw;
                });

List<Student> studentList = StudentService.list(queryWrapper);

打印出来的 sql 如下:

select * from student where group = '一班' and ((age = 14 and name = '张三')  or (age = 15 and name = '王五'));

上面是一个简单的例子

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六月的北回归线

砸我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值