JPA多条件查询时 部分条件为空

JPA多条件动态复杂查询以及分页复杂查询 JpaRepository 接口拥有常用的 CURD 方法以及分页方法、字段排序等操作,但是没有与或非、like、以及大于等于、小于等于等操作,这些方法都在 JpaSpecificationExecutor 接口中。 一 实体类 import java.math.BigDecimal; import java.sql.Timestamp; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import java 阅读详情

1、使用@Query

public interface UserRepository extends JpaRepository<User,Long> {

    //字符串类型在 mysql 为 null 时,为 '' 字符串,如果为空,就使用 1 = 1 条件去查询
    @Query(value = "select * from people where if(?1 !='',name like concat('%',?1,'%'),1=1) and if(?2 !='',sex=?2,1=1)"+
    " and if(IFNULL(?3,'') !='',age=?3,1=1) and if(IFNULL(?4,'') !='',num=?4,1=1) ",nativeQuery = true)
    List<People> find(String name,String sex,Integer age,Integer num);
}

Tips:

  1. nativeQuery = true 的含义是使用原生 SQL,即注解中的 SQL 语句会生效,false 的话就不会生效。
  2. SQL语句中 ?1、?2、?3、?4 的意思是代表方法中的第几个参数。
  3. SQL中模糊查询的写法为 like concat('%', ?1, '%')
  4. if(?1 !='',name like concat('%',?1,'%'),1=1) 代表传入的参数 name 如果不为 ""( Spring 类型空是 "" 而不是 null )将参数传入 name ,如果为空时显示 1 = 1 代表参数为真,对查询结果不产生作用。IF 的语法满足 mysql 的基本语法,IF(expr1,expr2,expr3) , 如果 expr1 为真 (expr1 <> 0 以及 expr1 <> NULL) ,那么 IF() 返回 expr2 ,否则返回 expr3
  5. if(IFNULL(?3,'') !='',age=?3,1=1) 表示如果传入的年龄是 null ,则替换成空字符串,然后判断是否为空,不为空则将参数传入 age ,否则忽略不对查询结果产生影响。IFNULL 是 mysql 中的一个函数,这个函数一般用来替换 NULL 值的。IFNULL(value1,value2),判断 value1 是否为 null,如果为 null 则用 value2 替换
  6. 参数定义时,定义数值,应使用 Integer,如果用 int 定义,当入参为 NULL 时,程序会报空指针错误。原因是 JAVA 中 int 是值类型,非对象,不可以设置为 NULL,integer 是对象类型,可以设置为 NULL 。

2、使用Specification

@Override
  public Specification<ProjectRiskSituation> findSpec(){
    return (Root<ProjectRiskSituation> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) -> {
      List<Predicate> listPredicate = new ArrayList<>();

      try {
        if(null != this.getStartFallDate() && !"".equals(this.getStartFallDate())){
          Predicate p1 = criteriaBuilder.greaterThanOrEqualTo(root.get("fallDate"),this.getStartFallDate().split(" ")[0]);
          listPredicate.add(p1);
        }

        if(null != this.getEndFallDate() && !"".equals(this.getEndFallDate())){
          Predicate p2 = criteriaBuilder.lessThanOrEqualTo(root.get("fallDate"),this.getEndFallDate().split(" ")[0]);
          listPredicate.add(p2);
        }
         }catch (Exception e) {
        e.printStackTrace();
      }
      
       return criteriaBuilder.and(listPredicate.toArray(new Predicate[0]));
       // 或  return query.where(listPredicate.toArray(new Predicate[0])).getRestriction();
    };
  }
JPA使用Specification来进行条件查询 JPA使用Specification来进行条件查询 封装Specification查询条件,在2.0版本以后这个类会被剔除,可以直接使用 Specification 自身对象来操作where多条件连接。 建立一个SpecificationFactory类,用于连接SQL语句。 package com.insigma.zjps.util; import org.springframework.dat... 阅读详情

相关推荐

STM32F4的sct文件理解

原文地址http://blog.sina.com.cn/s/blog_898f36590100ya2l.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_34008805的博客 995

Spring Data JPA 中Repository里的方法查询参数,需要判断是否为空的问题

问题: 动态查询需要判断参数是否为 null ,在repository里的那样的写法,在网上并没找到真正适用的写法。 package com......pubcascade.repository.dao; 简述: Spring Data JPA虽然大大的简化了持久层的开发,但是在实际开发中,很多地方都需要高级动态查询。 使用@Query注解,这种方式可以直接在Repository里...

_夜渐凉 2万+

【生信】全基因组测序(WGS)

1、全基因组测序(WGS) 的定义 2、GWS流程 2.1准备工作——分析软件 2.2原始数据质控 2.3数据预处理 2.4变异检测

weixin_40695088的博客 4万+

spring data jpa 之 JpaRepository

目前对JpaRepository的了解不足以总结成一篇博文,先做一点总结:    1,继承体系如下            2,spring 会为任何继承 Repository 的接口生成一个实现类;3,可以根据 spring 的规范,findBy + “属性名”生成自定义的方法;    都需要以findBy开头,且方法中的字段名必须与实体类中的属性名一致,并遵循驼峰式代码编写风格And:等价于SQ...

harryperlau的博客 832

从‘全步’到‘微步’:一张图看懂步进电机细分控制,选对模式让你的项目更丝滑

本文深入解析步进电机细分控制技术,从全步到微步的演进过程,帮助工程师根据项目需求选择最优控制模式。通过对比不同细分等级的性能特点和应用场景,提供3D打印、实验室自动化等领域的黄金配置方案,实现更精准、平稳的电机控制效果。

weixin_29290259的博客 471

Linux单独编译设备树,开发者分享 | Petalinux 工程中设备树的介绍

本文来自XILINX嵌入式产品应用工程师 Terry Ni设备树是 Petalinux kernel 的关键组件,接下来以 2020.1 版本为例,为大家介绍一下在Xilinx Petalinux 工程中的设备树是如何产生,配置以及修改的。Petalinux 工程中设备树的位置当我们创建了一个 petalinux 工程后(以zcu102为例),在编译的时候,会自动生成对应的设备树文件。这些设备树的...

weixin_28877107的博客 2609

jpa拷贝实体非空属性,自动设置modifyTime(更新时间)

import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; import org.sp...

qq_14945847的博客 833

Minitab正交试验设计:从入门到精通的完整指南

本文提供了一份使用Minitab进行正交试验设计的完整指南。从正交试验省时省力的原理讲起,详细介绍了在Minitab中创建正交表、填入数据、执行分析(包括解读ANOVA和P值)以及寻找最优参数组合的全流程。文章旨在帮助读者,特别是工艺优化和研发人员,快速掌握这一高效工具,从而用最少的实验次数锁定关键影响因素,提升工作效率与成果。

weixin_29201313的博客 469

Spring data jpa 多条件查询 参数为空的问题

业务需要多表关联查询并且模糊搜索,使用mybatis可用动态sql,jpa就没那么简单了,看了大量的文章,说的都是nm…终于找到一种可行的办法 返回的关联接口 public interface UserProjection { //@Value("#{target.userName}")//当别名与该getXXX名称不一致时,可以使用该注解调整 String getUserName(); S...

weixin_44656949的博客 4129

java链接opc报异常org.jinterop.dcom.common.JIException: Access is denied解决

记录一下这次从发现问题到解决问题的过程 项目是通过java链接OPC,读取数据,并且发送数据的 程序一直运行正常,最近客户反馈说无法读取数据,通过查看,发现访问异常了。花了2天的时间才解决了这个异常。 org.jinterop.dcom.common.JIException: Access is denied, please check whether the [domain-username-password] are correct. Also, if not already done please c

机器学习菜鸟 1万+

【软考中级网络工程师】知识点之 IP QoS 技术

本文围绕软考中级网络工程师必备的 IP QoS 技术展开,系统阐述其核心知识。首先解析 IP QoS 的定义、重要性及应用场景,揭示其在视频会议、在线游戏等场景的关键作用;接着深入讲解技术原理,包括流量分类与标记、整形与限速、拥塞管理及 RSVP 协议;随后对比尽力而为、IntServ、DiffServ 三种服务模型的特点;还介绍了配置实践与案例分析,探讨其与 SDN、5G 等技术的融合趋势。旨在帮助读者全面掌握 IP QoS 技术要点,为网络规划与优化提供理论与实践指导。

邓邓子的博客 1087

JPA,Spring Data进行后端非空验证的步骤

实体类上面加上 @NotBlank(message=“你的分类名称不可以为空”) package com.sophomoreblog.blog.po; /* * *@created 2020/10/3-17:05 * */ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.*; import javax.validati.

有时间可以指导毕业设计,可以私聊我。一个热爱编程的smallCuteMonkey,可以私信我 1049

simulink建模仿真实例1000例--第375例:基于Simulink进行复杂交通流的仿真建模

特点多车互动:模拟多个车辆之间的相互作用。动态变化:交通流量随时间和事件(如事故、天气变化)而变化。多样化驾驶行为:考虑不同的驾驶员行为模式(激进型、保守型等)。挑战准确性:准确地模拟各种因素对交通流的影响。实时性:处理大量车辆数据,并迅速做出反应。可扩展性:支持从简单场景到复杂城市交通网络的扩展。首先明确要模拟的任务内容。模拟不同类型的车辆(轿车、卡车、公交车等)。考虑不同驾驶员的行为模式。分析交通拥堵、事故对交通流的影响。

xiaoheshang_123的博客 203

快速学习Spring Data JPA -- 第六章JPA多条件查询

xl_echo编辑整理,交流学习请加1280023003 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!! 在Springle Data JPA中,我们看到了JPA由于不需要写SQL给我们简化了很多的工作。同时JPA的特性,让我们对数据层面的操作更加简化,更加的方便。但是同时他也给我们带来了不灵便和部分性能问题。那么从我们之前的文章中可以看到,JPA提供了相对灵活的...

xlecho的博客 601

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

springboot jpa实现多条件动态查询

最近学习了springboot项目,用到了对条件动态查询,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用 文章目录一 原理简介二 代码举例三 总结 一 原理简介 使用Spring Data JPA进行数据操作的时候一般有操作的复杂程度分为三个档次。 1、使用Spring Data JPA接口。 JpaRepository继承于PagingAndSortingRepository,所以它传递性地拥有了以上接口的所有方法,同时,它还继承了另外一个QueryByExampl.

ergouy's blog 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SpringBoot | JPA基本查询及多条件查询,参数为空判断

JPA基本查询及多条件查询,参数为空判断,原生语句的写法

雜言非語 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JPA多条件查询之AND和OR混合查询

JPA多条件查询这种业务场景是很常见的,比如说这种: 像这种同一个查询条件可以多选的用OR语句来查询,比如"材质"之间选了"PU"和"橡胶"就用OR;不同查询条件之间则用AND语句查询,比如"品牌"和"材质"之间就用AND拼接。我现在要根据不同的条件查询某个学校的学生: 实体类: @Data @Entity @Table(name = "test_module") public cla...

龍的天空 1万+

Jpa模糊查询学习笔记一:SpringBoot+jpa实现多条件模糊查询

文章目录1. Jpa模糊查询学习笔记一:springBoot+jpa实现多条件模糊查询1.1. 扩展知识1.2. jpa多条件查询重写Specification的toPredicate方法1.3. toPredicate()方法的三个参数:Root \1. Jpa模糊查询学习笔记一:springBoot+jpa实现多条件模糊查询 1.1. 扩展知识 匿名内部类:https://blog.csdn...

公子&小白的博客 8914

SpringBoot中基于JPA的多条件动态查询二次封装

最近地摊经济盛行了,对于wshanshi这个吃货来说是再幸福不过的了。逛吃,逛吃,逛吃…怕是开心的要飞起来了呢! 要不咱也摆摊卖点啥去?看了看镜子里帅气的面孔,笑容愈发… “老板,来一份wshanshi。酸甜,微辣,微辣…” “好嘞!您稍等!我这就去把wshanshi叫来!” “小二,来说一下SpringBoot中基于JPA的多条件动态查询封装。讲不好不但不给饭钱,还要把你们wshanshi小姐姐赔给我!” “好嘞客官,给您免单!赶紧把她带走,带走!把我吃穷了都!” 用过SpringDataJPA的都.

程序和我有一个能跑就行了 4849

JPA多条件动态查询

JPA如何根据前台传的多个参数(有的有值,有的没有值),进行like、equals等复杂,动态查询数据 主要使用以下几个类 Specification Predicate CriteriaQuery CriteriaBuilder PagingAndSortingRepository JpaSpecificationExecutor 1.代码 1-1.entity @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "T_

沐雨云楼 6475

jpa多条件查询方法

@Override public List myEditProductList(ProductEntity product, Page pageItems) { //String sql = ""; Query query = null; StringBuilder sql = new StringBuilder("select * from plug_product p w

zl386119974的专栏 6334

JPA多表多条件查询解决思路

JPA单表多条件查询 可以在Service层使用Predicate实现 ServiceImpl实现类,查询条件可以自定义 @Override public Page<OrgInfo> findOrgByCondition(OrgParam orgParam, Pageable pageable) { return orgRepository.findAll((root, qu...

qixiang_chen的博客 2090

Spring Data JPA 多条件判空查询

Spring Data JPA虽然大大的简化了持久层的开发,但是在实际开发中,很多地方都需要高级动态查询。 使用@Query注解,这种方式可以直接在Repository里面写sql,但是这种方式的问题就是太麻烦了,而且非常容易出错,扩展性也很差,还不如直接用mybatis,奈何项目用到是jpa... mysql判空:if(条件, 表达式1 ,表达式2) 如果条件满足,返回表达式1;条件不满足,返回表达式2 代码 我的业务:高级搜索,根据条件进行动态查询并判断是否为空 @Repos...

张家煦的博客 6713

SpringData JPA利用Specification多条件查询

SpringData JPA遵循Eric Evans在Domain Driver Design一书中的规范,让你可以使用编程方式来构建多条件查询。 快速开始 关于SpringBoot与JPA的快速整合,已经在这篇文章中写的非常详细:SpringBoot整合Spring Data JPA,一些配置部分就不再赘述了,我们直接创建一个条件丰富一些的实体类做测试。 创建实体类 @Entity(name = "t_blog") @Data @AllArgsConstructor @NoArgsConstructor

天乔巴夏丶 1338

【JPA操作】CriteriaQuery多条件查询

用List集合存储条件。 public List<SysOrgQrcodeConfig> findByQrTitle(String title, String orgPid) { List<Predicate> predicateList = new ArrayList<>(); CriteriaBuilder ...

微信公众号: 后端码匠 6395
上一篇: 创建型模式之抽象工厂
下一篇: @Qurey注解的使用
☞十一
博客等级 码龄9年 8粉丝 57原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值