我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

【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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

mybatis-plus中QueryWrapper and or连用且实现分页的方法

今天小编给大家分享一下mybatis-plus中QueryWrapper and or连用且实现分页的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获
2023-06-26

sql中and和or的用法

and 和 or 是 sql 中的逻辑运算符,用于组合条件。and 运算符仅当所有条件都为真时返回真,而 or 运算符只要有一个条件为真就返回真。and 优先级高于 or,可使用括号更改优先级。and 用于缩小结果集(仅包含满足所有条件的行
sql中and和or的用法
2024-05-10

python中的and和or怎么使用

在Python中,and和or是逻辑运算符,用于组合多个条件或表达式的结果。and操作符用于将两个条件或表达式的结果进行逻辑与操作。如果两个操作数都为True,则结果为True,否则结果为False。示例:x = 5y = 10z
python中的and和or怎么使用
2024-02-29

sql中and和or的用法区别

sql中and和or运算符用于组合条件,实现and和or逻辑运算。and运算符要求所有条件都为真,而or运算符要求至少一个条件为真。使用括号可控制运算顺序,复杂查询中可结合使用and和or运算符获得所需逻辑结果。SQL 中 AND 和 OR
sql中and和or的用法区别
2024-05-12

or在python中的用法

python 中 range() 函数生成整数序列,从 start(可选,默认为 0)到 stop(必需,不包含),步长为 step(可选,默认为 1)。它返回一个范围对象,包含序列中的整数。Python 中 range() 函数的用法r
or在python中的用法
2024-05-15

sql中for循环的用法

sql 中 for 循环可用于遍历结果集,逐行执行操作。语法:for var_name in (select_statement) [loop_statement] end for,其中 var_name 为存储当前行的变量,select_
sql中for循环的用法
2024-05-15

Shell中的for循环的用法

本篇内容主要讲解“Shell中的for循环的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Shell中的for循环的用法”吧!代码如下:for((i=1;i<=10;i++));do ech
2023-06-09

sql中and和or连用的方法是什么

在SQL中,我们可以使用AND和OR运算符来连接多个条件。这两个运算符用于组合多个条件,以便生成更复杂的查询条件。以下是使用AND和OR运算符的两种常用方法:1. 使用AND运算符:当我们希望同时满足多个条件时,我们可以使用AND运算符连接
2023-08-31

Java中break、continue、return在for循环中的使用

引言:在使用循环的时候,循环里面带有break、continue、return的时候经常弄混,今天特意整理了下,以待后用... for (int i = 1; i < 5; i++) { System.out.println(“i==for
2023-05-30

编程热搜

目录