上周的时候遇到一个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

//这样拼接,只是把两个字段作为联合条件,只要有一个都算满足

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐