返回顶部
首页 > 资讯 > 数据库 >【mybatis-plus的LambdaQueryWrapper中and、or的用法 】在 for循环中使用 or
  • 955
分享到

【mybatis-plus的LambdaQueryWrapper中and、or的用法 】在 for循环中使用 or

mybatissqlmysqljava 2023-08-18 23:08:17 955人浏览 八月长安
摘要

【LambdaQueryWrapper的or用法】 错误写法一: //【 错误写法1: 打印的sql中or拼接没有加括号:SELECT COUNT( * ) FROM pm_project WHERE `del_flag`

【LambdaQueryWrapper的or用法】

错误写法一:

//【 错误写法1: 打印的sql中or拼接没有加括号:SELECT COUNT( * ) FROM pm_project WHERE `del_flag` = 0 AND// ( id = 287 AND `project_status` = '1' OR `project_status` = '2' OR `project_status` = '3' OR `project_status` = '4' AND `del_flag` = '0' );//          LambdaQueryWrapper lqw = Wrappers.lambdaQuery();//          lqw.eq(PmProject::getId,id)//             .eq(PmProject::getProjectStatus, '1').or()//             .eq(PmProject::getProjectStatus, '2').or()//             .eq(PmProject::getProjectStatus, '3').or()//             .eq(PmProject::getProjectStatus, '4')//             .eq(PmProject::getDelFlag, '0');

【控制台sql打印:】

在这里插入图片描述

-- 错误写法一:1、通过id能找到一条未被删除(`del_flag`=0)的数据SELECTid,`project_code`,`project_name`,`project_status`,`project_type_code`,`start_time`,`end_time`,`del_flag`,`creator_id`,`modifier_id`,create_time,update_time,`delay_end_time` FROMpm_project WHEREid = 287 AND `del_flag` = 0;-- 2、COUNT = 19SELECTCOUNT( * ) FROMpm_project WHERE`del_flag` = 0 AND ( id = 287 AND `project_status` = '1' OR `project_status` = '2' OR `project_status` = '3' OR `project_status` = '4' AND `del_flag` = '0' );

错误写法二:

//  错误写法2://          LambdaQueryWrapper lqw = Wrappers.lambdaQuery();//          lqw.and(wq -> wq//             .eq(PmProject::getId,id)//             .eq(PmProject::getProjectStatus, '1').or()//             .eq(PmProject::getProjectStatus, '2').or()//             .eq(PmProject::getProjectStatus, '3').or()//             .eq(PmProject::getProjectStatus, '4')//             .eq(PmProject::getDelFlag, '0'));

在这里插入图片描述

-- 错误写法二:1、通过id能找到一条未被删除(`del_flag`=0)的数据SELECT id,`project_code`,`project_name`,`project_status`,`project_type_code`,`start_time`,`end_time`,`del_flag`,`creator_id`,`modifier_id`,create_time,update_time,`delay_end_time` FROM pm_project WHERE id=287 AND `del_flag`=0; -- 2、COUNT = 19 SELECT COUNT( * ) FROM pm_project WHERE `del_flag`=0 AND ((id = 287 AND `project_status` = '1' OR  `project_status` = '2' OR `project_status` = '3' OR `project_status` = '4' AND `del_flag` = '0')); -- 上面的sql里写了id = 287 竟然还能查出19条数据,说明where id = 287 没有生效。原因: AND ((id = 287 AND `project_status` = '1' OR `project_status` = '2'-- 拼接短路需要把id放外面,把里面所有的or用括号括起来-- ;下面的sql可以使之生效,查出一条数据-- COUNT = 1SELECTCOUNT( * ) FROMpm_project WHEREid = 287

正确写法:

         LambdaQueryWrapper<PmProject> lqw = Wrappers.lambdaQuery();            lqw.eq(PmProject::getId,id);            lqw.and(wq -> wq               .eq(PmProject::getProjectStatus, '1').or()               .eq(PmProject::getProjectStatus, '2').or()               .eq(PmProject::getProjectStatus, '3').or()               .eq(PmProject::getProjectStatus, '4')               .eq(PmProject::getDelFlag, '0'));if (baseMapper.selectCount(lqw) > 0)   throw new CustomException("项目不是未开始状态,无法删除!");

在这里插入图片描述
在这里插入图片描述

 -- 正确写法 1、通过id能找到一条未被删除(`del_flag`=0)的数据SELECTid,`project_code`,`project_name`,`project_status`,`project_type_code`,`start_time`,`end_time`,`del_flag`,`creator_id`,`modifier_id`,create_time,update_time,`delay_end_time` FROMpm_project WHEREid = 287 AND `del_flag` = 0;-- 2找不到状态为1234的项目,故可以删除SELECTCOUNT( * ) FROMpm_project WHERE`del_flag` = 0 AND (id = 287 AND ( `project_status` = '1' OR `project_status` = '2' OR `project_status` = '3' OR `project_status` = '4' AND `del_flag` = '0' ));

删除项目时校验的最终正确写法:

    @Override   @Transactional   public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {      if(isValid){         //TODO 做一些业务上的校验,判断是否需要校验         ids.stream().forEach(id->{            if (baseMapper.selectById(id)==null) {               throw new CustomException("项目基础信息不存在");            }            LambdaQueryWrapper<PmProject> lqw = Wrappers.lambdaQuery();            lqw.eq(PmProject::getId,id);            lqw.and(wq -> wq               .eq(PmProject::getProjectStatus, '1').or()               .eq(PmProject::getProjectStatus, '2').or()               .eq(PmProject::getProjectStatus, '3').or()               .eq(PmProject::getProjectStatus, '4')               .eq(PmProject::getDelFlag, '0'));            if (baseMapper.selectCount(lqw) > 0)               throw new CustomException("项目不是未开始状态,无法删除!");         });      }      return removeByIds(ids);   }

and、or的用法

// WHERE xxxx!=id And ( xxxx=ANo or xxxx=BNo)            LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();            queryWrapper.ne(Project::getId,project.getId());            queryWrapper.and((wrapper)->{                wrapper.eq(Project::getANo,project.getBillNo())                        .or().eq(Project::getBNo,project.getBillNo());            });

来源地址:https://blog.csdn.net/qq_43964955/article/details/126951506

您可能感兴趣的文档:

--结束END--

本文标题: 【mybatis-plus的LambdaQueryWrapper中and、or的用法 】在 for循环中使用 or

本文链接: https://lsjlt.com/news/374836.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【mybatis-plus的LambdaQueryWrapper中and、or的用法 】在 for循环中使用 or
    【LambdaQueryWrapper的or用法】 错误写法一: //【 错误写法1: 打印的sql中or拼接没有加括号:SELECT COUNT( * ) FROM pm_project WHERE `del_flag` ...
    99+
    2023-08-18
    mybatis sql mysql java
  • 【使用 LambdaQueryWrapper 实现嵌套 and 和 or 】在 add 中 循环添加 or
    前言 使用 LambdaQueryWrapper 实现嵌套 and 和 or 使用mybatis-plus 中的 LambdaQueryWrapper 进行查询,在添加查询条件的时候,有时候会需要添加...
    99+
    2023-08-31
    mybatis mysql 数据库
  • Mybatis中and和循环or混用操作(or转换成in)
    Mybatis and和循环or混用 这次项目用到一个and和or混用的场景 , 因为用到多个or(循环), 没想到好的办法 最终转换成用 IN实现: 场景 用left join链接...
    99+
    2024-04-02
  • Mybatis-Plus中and()和or()的使用与原理详解
    目录一. 简单无优先级连接(即无括号的sql语句)1. 与连接 and()2. 或连接 or()二. 复杂有优先级的的连接补充:MybatisPlus中and和or的组合使用总结一....
    99+
    2024-04-02
  • Mybatis-Plus中的and()和or()的使用与原理介绍
    一. 简单无优先级连接(即无括号的sql语句) 简单来说,两个子条件间默认and与连接,若两个之间显式写出or()则or或连接. 与连接 and() 当需要简单的将两个条件与连接,则最直接的写法为: QueryWrapper queryW...
    99+
    2023-08-31
    mybatis java mysql
  • mybatis-plus中QueryWrapper and or连用且实现分页的方法
    今天小编给大家分享一下mybatis-plus中QueryWrapper and or连用且实现分页的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读...
    99+
    2023-06-26
  • sql中and和or的用法
    and 和 or 是 sql 中的逻辑运算符,用于组合条件。and 运算符仅当所有条件都为真时返回真,而 or 运算符只要有一个条件为真就返回真。and 优先级高于 or,可使用括号更改...
    99+
    2024-05-10
  • python中的and和or怎么使用
    在Python中,and和or是逻辑运算符,用于组合多个条件或表达式的结果。 and操作符用于将两个条件或表达式的结果进行逻辑与操作...
    99+
    2024-02-29
    python
  • sql中and和or的用法区别
    sql中and和or运算符用于组合条件,实现and和or逻辑运算。and运算符要求所有条件都为真,而or运算符要求至少一个条件为真。使用括号可控制运算顺序,复杂查询中可结合使用and和o...
    99+
    2024-05-12
  • JavaScript中如何使用or循环语句
    这篇文章给大家分享的是有关JavaScript中如何使用or循环语句的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。for这大概是应用最广的循环语句了吧,简单实用,且大多数时候性能还是在线的,唯一的缺点大概就是太普...
    99+
    2023-06-20
  • or在python中的用法
    python 中 range() 函数生成整数序列,从 start(可选,默认为 0)到 stop(必需,不包含),步长为 step(可选,默认为 1)。它返回一个范围对象,包含序列中的...
    99+
    2024-05-15
    python
  • JavaScript变量or循环中的var和let怎么使用
    这篇“JavaScript变量or循环中的var和let怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面...
    99+
    2024-04-02
  • mysql联合查询中and和or的使用
    这篇文章主要讲解了“mysql联合查询中and和or的使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql联合查询中and和or的使用”吧! 需求...
    99+
    2024-04-02
  • Oracle中for循环的使用方法
    Oracle for in loop 循环的一些实例,以作学习和加强使用熟练度及场景应用. 一些技巧 for 语句后面的 loop end l...
    99+
    2024-04-02
  • sql中for循环的用法
    sql 中 for 循环可用于遍历结果集,逐行执行操作。语法:for var_name in (select_statement) [loop_statement] end f...
    99+
    2024-05-15
  • sql中and和or连用的方法是什么
    在SQL中,我们可以使用AND和OR运算符来连接多个条件。这两个运算符用于组合多个条件,以便生成更复杂的查询条件。以下是使用AND和...
    99+
    2023-08-31
    sql
  • Shell中的for循环的用法
    本篇内容主要讲解“Shell中的for循环的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Shell中的for循环的用法”吧!代码如下:for((i=1;i<=10;i++));do ...
    99+
    2023-06-09
  • Java中break、continue、return在for循环中的使用
    引言:在使用循环的时候,循环里面带有break、continue、return的时候经常弄混,今天特意整理了下,以待后用... for (int i = 1; i < 5; i++) { System.out.println...
    99+
    2023-05-30
    java for break
  • mybatis如何使用Criteria的and和or进行联合查询
    目录Criteria的and和or进行联合查询使用criteria 查询xx and ( xx or xx)形式的sqlCriteria的and和or进行联合查询 DemoExa...
    99+
    2024-04-02
  • 如何在Shell中使用for循环
    本篇文章给大家分享的是有关如何在Shell中使用for循环,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。第一类:数字性循环for1-1.sh#!/bin/bash &...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作