赞
踩
我们一般用 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 = '王五'));
上面是一个简单的例子
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。