当前位置: 首页 > article >正文

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 = '王五'));

上面是一个简单的例子


http://www.kler.cn/a/231729.html

相关文章:

  • springboot第82集:消息队列kafka,kafka-map
  • Spring Boot教程之Spring Boot简介
  • 【配置后的基本使用】CMake基础知识
  • STM32单片机设计防儿童人员误锁/滞留车内警报系统
  • Python 网络爬虫入门教程
  • Solana 区块链的技术解析及未来展望 #dapp开发#公链搭建
  • SQL,HQL刷题,尚硅谷
  • 【力扣】移动零,双指针法
  • 【开源】JAVA+Vue.js实现在线课程教学系统
  • 前端JavaScript篇之对闭包的理解
  • JSP页面组件
  • Vue事件中如何使用 event 对象
  • LRU和LFU有什么区别
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • 探索C语言中的联合体与枚举:数据多面手的完美组合!
  • 掌握虚拟化与网络配置之道:深入浅出VMware及远程管理技巧
  • 在Ubuntu上安装JetBrains Toolbox并解决libfuse.so.2依赖问题
  • 搭建macOS开发环境-1:准备工作
  • 显示器颜色显示技术原理
  • 3.0 Hadoop 概念
  • 堆排及时间复杂度分析
  • 2024.2.6日总结(小程序开发3)
  • 如何用 npm 运行本地 js 文件
  • 【doghead】VS2022 win11 安装配置WSL2 以编译linux端的cmake项目并运行2
  • 【网页设计期末】茶文化网站
  • ShardingSphere 5.x 系列【5】Spring Boot 3 集成并实现读写分离