使用mybati-plus的条件构造器QueryWrapper的eq(boolean condition, R column, Object val) 容易踩的坑!_条件构造器eq 三个参数-程序员宅基地

技术标签: spring boot  mybatis  spring cloud  数据库  

话不多说:代码容易踩的坑我来踩,免费的赞赞你来点。

先说一下这个eq函数三个参数的作用。

第一个参数boolean condition代表条件判断,也就是我们可以写条件判断,如果条件最终结果是true,那么sql就会有where条件;如果是false,那么sql就不会有where条件【注意:这里是该字段不会再sql语句中带上where,但无论条件成立与否,都会走后面的两个参数】

第二个参数R column 代表数据表中的列名。

第三个参数object val代表列名对应的值。

现在看一个具体例子:比如现在我有一个接口,查询数据库中一张数据表里面的所有数据,假如叫做sys_operation_log系统操作日志,并且搜索条件是时间范围,有开始时间和结束时间,然后现在前端说有一个vue组件是date-picker,该组件默认传数组,问我是否方便接收数组,我说可以。所以现在的接口就是这样子的。

@Autowired

SysOperationLogService sysOperationLogService ;

@GetMapping("/queryAll")

@ResponseBody

public SysOperationLogDTO queryAll(@RequestParam(value = "时间范围") , required = false) List<String> datePicker){

        QueryWrapper<SysOperationLogDTO> queryWrapper = new QueryWrapper<SysOperationLogDTO >() ;

        queryWrapper.between(!CollectionUtils.isEmpty(datePicker) , datePicker.get(0),datePicker.get(1)) ;

//本来这个判断如果不成立,是不会走下面的,但是现在后面的datePicker.get(0),datePicker.get(1)还是会走到,这样就会导致空指针异常!所以我们最后用if去判断

if(!CollectionUtils.isEmpty(datePicker)){}。

所以以后谨慎使用这个判断,当然如果她是基本数据类型,而不是引用数据类型的话【数组,对象】我们还是可以用的。

        sysOperationLogService.list(queryWrapper) ;

}

总结:QueryWrapper的xx(boolean condition , R column , object val);第一个参数无论成不成立true or false最终还是会走后面的column 和 val,所以当遇到引用数据类型比如数组.get()、对象.getXXX(),如果此时为空的话,会报空指针异常!所以以后遇到引用数据类型不要使用condition,直接用if判断或者Optional.ofNullable(T val).ifPresent();如果是基本数据类型可以。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44826783/article/details/134317659

智能推荐

施行研发管理,顶层设计是第一步——研发管理自身的战略_施行研发管理,顶层设计是第一步——研发管理自身的战略-程序员宅基地

文章浏览阅读1.7k次。之前写过一篇文章 《研发管理成熟度模型,找到起点再出发》,这里面描述了研发管理体系的发展方向,本篇文章要说的是,企业研发管理持续沿着这个模型演进,相关的必要条件,和大致里程碑。关于研发管理成熟图模型,可以参考关联文章,这里不重复了。必要条件对于技术型企业,产品和技术研发自然是公司战略的主题之一,因此,研发管理也应该成为战略主题的一部分,在公司战略和研发总体战略的指导下,形成研发管理自身的战略。演进路标..._施行研发管理,顶层设计是第一步——研发管理自身的战略

PD DRP双向快充协议芯片HUSB251用于无绳电动工具/户外储能/超级充电宝_drp协议芯片-程序员宅基地

文章浏览阅读484次。HUSB251支持PD 28V 5A双向充放电应用_drp协议芯片

计算机毕业设计 SSM在线药品购物商城系统(源码+论文)_大学生毕业答辩线上买药系统-程序员宅基地

文章浏览阅读711次。 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的java web缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的java web管理系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质java web毕业设计,今天要分享的是 基于SSM的在线药品超市购物系统学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:5分创新点:3分界面美化:5分。_大学生毕业答辩线上买药系统

ftp允许root登陆_ftp root登录-程序员宅基地

文章浏览阅读5.2k次。 1.编辑/etc/vsftpd/user_list和/etc/vsftpd/ftpusers两个设置文件脚本,将root账户前加上#号变为注释。(即让root账户从禁止登录的用户列表中排除) 2.重新开启vsftpd service vsftpd reload 允许root账户访问ftp,可以远程访问centos系统中的任一文件,对于远程维护centos系统或下载文件十分方便。..._ftp root登录

PAT甲级 1025. PAT Ranking (25)-程序员宅基地

文章浏览阅读130次。题目:Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ra

vue中,解决chrome下,的warning, Added non-passive event listener to a scroll-blocking ‘mousewheel‘ event 问题_default-passive-events-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏7次。一、警告信息如下:vue+element项目中,解决chrome下的passive警告问题element-ui.common.js?5c96:9972 [Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive. See https://ww_default-passive-events

随便推点

Apache Ranger0.5编译-程序员宅基地

文章浏览阅读22次。1. 编译环境# CentOS7# java git gcc环境yum install git wget yum java-1.8.0-openjdk* gcc -y# maven环境wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin...

SpringMVC基础掌握--一图看懂三大处理器以及执行流程_springmvc处理器-程序员宅基地

文章浏览阅读1k次,点赞29次,收藏27次。Spring MVC所有的请求都经过Dispatcherservlet来统一分发。DispatcherServlet将请求分发给Controller之前,需要借助于Spring MVC提供的HandlerMapping定位到具体的Controller。HandlerMapping接口负责完成客户请求到Controller映射。Controllr接口将处理用户情求,这和Java Servlet扮演的角色是一致的。_springmvc处理器

ES6 模块暴露_es6暴露模块-程序员宅基地

文章浏览阅读31次。ES6 模块暴露。_es6暴露模块

Intellij IDEA远程debug教程_intell运行调试配置怎么设置-程序员宅基地

文章浏览阅读8.9k次,点赞3次,收藏14次。Intellij IDEA远程debug教程_intell运行调试配置怎么设置

Android:Error running ‘app‘:Timed out after 300secends waiting for emulator to come online解决(个人看法)_error running 'app': timed out after 300seconds wa-程序员宅基地

文章浏览阅读1.5k次,点赞7次,收藏4次。我自己的是能用这个方法解决的,你们的我不确定。我看别人的解决方案是让更新Android Emulator,但我确实不知道怎么更新它,我就随便弄了一下(就上面的),能运行了,想跟大家分享一下!之后就一直点击next,最后点击cancel。如果出来的运行结果格式不对,就删了重新安装。我每次出现安装结果都不一样,这次的是这个。_error running 'app': timed out after 300seconds waiting for emulator to come

Revit二次开发-【EG01】构件工程量提取_revit装饰工程量提取教程-程序员宅基地

文章浏览阅读1.3k次。本文主要介绍了通过Revi二次开发插件,实现构件工程量的获取(包括楼梯、内建模型等较难提取构件)_revit装饰工程量提取教程

推荐文章

热门文章

相关标签