上周的时候遇到一个sql需求,传入List集合,将两个字段作为联合条件,并上其他字段条件,进行批量查询.
示例:
student表:
主键id | 学生名称 | 学生年龄 | 老师pid |
id | name | age | tid |
要求将【学生名称、学生年龄】作为联合条件(可同时传入多个学生,且这两个字段需同时满足),并且tid属于"1"旗下的
seletct * from t_student t1
where
(
(t1.name = ? and t1.age = ?)
or
(t1.name = ? and t1.age = ?)
or
(t1.name = ? and t1.age = ?)
)
and t1.tid = 1
懒得写xml就看看mybatis-plus里面有没有方法可以直接用。最终方法如下
//传入的tid
Long tid = tid;
//传入的实体
List<Student> list = new ArrayList<>();
QueryWrapper<Student> queryWrapper = new QueryWrapper();
queryWrapper.and(wrapper -> {
for(Student student: list) {
wrapper.or(wp -> wp.eq("name", student.getName)).eq("age",student.getAge);
}
});
queryWrapper.eq("tid",tid)
最后
一开始看的官方文档上,用的.or方法,但是拼接出来的sql不是我想要的
seletct * from t_student t1
where
(t1.name = ? and t1.age = ?)
or
(t1.name = ? and t1.age = ?)
or
(t1.name = ? and t1.age = ?)
and t1.tid = 1
//这样拼接,只是把两个字段作为联合条件,只要有一个都算满足