SpringData Jpa 之 Specification 构建子查询

使用JPA Specification EntityManager 多条件 复杂动态查询 子查询 组合 and or 分组 分页 排序 案例 前言 注意: sql的and的优先级比or高,默认先查and的,比如: SELECT 3 > 1 or 3 > 4 and 3 > 4 //结果为true 等价于 SELECT 3 > 1 or ( 3 > 4 and 3 > 4) 实例1 原生sql为 SELECT * from A A WHERE (a = 'xx' and b =... 阅读详情

一些简单的查询条件使用 SpringData Jpa 提供的查询方法和按命名规则匹配的方法就能完成,当面对复杂查询时,需要使用 Specification 来动态构建查询条件。

使用 Specification 构建子查询 :

private Specification<Post> buildSpec(@NonNull ParentParam parentParam) {
    
    return (parentRoot, criteriaQuery, criteriaBuilder) -> {
        List<Predicate> predicates = new LinkedList<>();

        if (parentParam.getStatus() != null) {
            predicates.add(criteriaBuilder.equal(parentRoot.get("status"), parentParam.getStatus()));
        }
        
        if (parentParam.getId() != null) {
            Subquery<Parent> subQuery = criteriaQuery.subquery(Parent.class);
            Root<Subsidiary> subsidiaryRoot = subQuery.from(Subsidiary.class);
            subQuery.select(subsidiaryRoot.get("subId"));
            subQuery.where(
                criteriaBuilder.equal(parentRoot.get("id"), subsidiaryRoot.get("subId")),
                criteriaBuilder.equal(subsidiaryRoot.get("categoryId"), parentParam.getCategoryId()));
            predicates.add(criteriaBuilder.exists(subQuery));
        }
        
         return criteriaQuery.where(predicates.toArray(new Predicate[0])).getRestriction();
    }
}
Spring-data-jpa最全的查询语法总结,直入超神 spring-data 一统江湖,玩转多种数据源今天这篇文章总结下spring data jpa的查询语法,在开发中能够灵活使用,在开始下面的之前我们定义一个entity,以便后面的部分使用这里定义一个玩家的entity@Data@Entity@ApiModel(description = "玩家信息")@Id@ApiModelProperty(value = "主键")@ApiModelProperty(value = "玩家名字") 阅读详情

相关推荐

SpringBoot JPA动态查询完全指南:从Specification基础到高级实战,详解动态条件组合与性能优化

JPA动态查询是根据运行时条件构建的查询,适用于业务系统中80%的查询需求,如商品筛选、订单查询等。与静态查询相比,动态查询具有条件灵活、代码复用性高、易于维护等优势。JPA提供了多种动态查询方式,包括方法名派生查询、@Query注解、Criteria API、QueryDSL和Specification。其中,Specification是JPA提供的优雅解决方案,基于Criteria API封装,使用谓词组合查询条件。通过继承JpaSpecificationExecutor接口,开发者可以创建Specif

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1393

Spring Data Specification子查询的用法

基础用法参考: Spring Data Specification基础用法 这里分享一下子查询的简单用法 Specification<SmsParam> specification = (Root<SmsParam> root, CriteriaQuery<?> query, CriteriaBuilder cb) -> { Pre...

qq_36564291的博客 2765

spring data jpa 的Specifications动态查询

spring data jpa 的Specifications动态查询 单条件查询 多条件查询 分页查询

Spring data jpa Specification 子查询实现

Spring data jpa Specification 子查询实现使用到的类前期准备工作子查询例子 在使用Spring data jpa进行没有实体关联的相关查询时无法使用 get("fieldName)或者join的方法进行操作时,可采用子查询来对另一个实体进行查询,并将查询结果作为原来查询(父查询)的查询条件值。 使用到的类 javax.persistence.criteria.Subqu...

xuyp95的博客 5244

YOLOv11 改进策略 | HWD:引入 Haar 小波变换,减少信息丢失

在卷积神经网络(CNN)中,下采样(Downsampling)是降低特征图分辨率、扩大感受野的关键操作,通常通过最大池化(MaxPool)或步长为 2 的卷积(Strided Convolution)实现。然而,这些方法在降低分辨率的同时,往往会丢失图像中的高频细节信息(如边缘、纹理)和精确的空间位置信息,这可能对后续特征提取和目标检测精度产生不利影响,尤其是对于小目标和需要精细定位的任务。

走向CTO的路上... 1792

从信号到振镜:STM32F103 + XY2-100协议 + AM26LS31芯片的激光打标/雕刻系统信号链搭建指南

本文详细介绍了基于STM32F103微控制器和XY2-100协议的激光打标/雕刻系统信号链搭建方法。从数字振镜控制协议解析、AM26LS31差分驱动电路设计到信号完整性优化,提供了一套完整的解决方案,帮助工程师实现高精度激光控制系统的开发与调试。

weixin_42536058的博客 237

Spring Data JPA入门简解与XML配置实现

Spring Data 项目的目的是为了简化构建基于Spring 框架应用的数据访问技术,包括非关系数据库、Map-Reduce 框架、云数据服务等等。另外也包含对关系数据库的访问支持。 SpringData有许多子项目,其中一个为Spring Data JPA 。 【1】JPA JPA是sun提出的一个对象持久化规范,各JavaEE应用服务器自主选择具体实现。 JPA的设计者是Hib...

小小默:进无止境 1万+

手把手教你用CubeMX给GD32F103点灯、调串口(附完整工程)

本文详细介绍了如何使用CubeMX为GD32F103开发板配置GPIO点灯和串口通信,包含完整的工程创建、代码构建和测试流程。特别强调了GD32与STM32的差异点及常见避坑技巧,帮助开发者快速上手GD32开发。

weixin_42566424的博客 313

Spring Data JPA 快速入门实战笔记

Spring Data JPA 入门实战笔记 相关概念 ORM思想 Object-Relational Mapping 表示对象关系映射,在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中。 主要目的: 操作实体类就相当于操作数据库表,不再重点关注sql语句 建立两个映射关系: 实体类和表的映射关系 实体类中属性和表中字段的映射关系 实现了ORM思想的框架: Mybatis、Hibernate Hibernate框架 一个开放源代码的对象关系映射框架 对JDBC进行了非常轻量级的对

qq_41112238的博客 418

傻瓜式下载、安装CentOS7操作步骤

CentOS7.9下载和安装操作步骤

weixin_45608163的博客 1万+

ArduPilot + Gazebo + Mavros + QGC + 遥控器:从仿真到实机的自主轨迹控制实践

本文详细介绍了基于ArduPilot、Gazebo、Mavros和QGC的无人机自主轨迹控制全流程实践。从仿真环境搭建、多终端协同配置,到遥控器集成与自主圆形轨迹算法实现,提供了完整的代码示例和实机迁移要点,帮助开发者快速掌握无人机自主控制技术。

corn8的博客 942

JPA exists查询,使用Specification或原生Sql两种方式

JPA的Specification方式查询单表是十分方便的,但是如果需要使用多表连接查询时,项目里没有找到可供参考的样本。优点:不需要编写sql,也不需要进行key驼峰转换,无须使用map转对象或调整前端接收值的格式调整,更重要的是符合代码规范。需求:包含多查询条件(条件为空时不参与查询),查询语句包含了exists从表,且需要分页的典型页面查询场景。使用JPA的Specification的单表查询,在这里仅查询主表作为基础。如果查询sql不是可变的,可以在Dao层定义时,使用@Query注解。

weixin_50728191的博客 1806

攻防世界 web高手进阶区 9分题 Web_python_flask_sql_injection

继续ctf的旅程,开始攻防世界web高手进阶区的9分题,本文是Web_python_flask_sql_injection的writeup

闵行小鱼塘 1476

JPA-Specification常用条件查询构造方式

使用JAP的JpaSpecificationExecutor常用条件查询方式

职业炮灰的博客 4459

8-bit量化在YOLOv11中的部署实践-(使用PTQ、QAT量化技术实现模型体积压缩和推理加速)

本文系统介绍了YOLOv11模型量化技术,主要包括三个核心部分:首先阐述模型量化的基础理论,包括量化分类、数学原理和性能影响;其次分析YOLOv11架构特点及其量化敏感层;最后详细讲解训练后量化(PTQ)的具体实现流程。研究表明,8-bit量化可使YOLOv11模型大小缩减至1/4,推理速度提升1.7-2.3倍,精度损失控制在1%以内。文章特别强调了校准算法选择(如最小最大值法和KL散度法)对量化效果的关键影响,并提供了完整的代码实现示例,为YOLOv11的高效部署提供实用指导。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1629

将Keil中的变量数组导出

首先,写好导出数据的函数。

小柚子的博客 1952

jpa-JpaSpecificationExecutor子查询等功能使用

  JpaSpecificationExecutor接口,该接口提供了如下一些方法: public interface JpaSpecificationExecutor&lt;T&gt; { T findOne(Specification&lt;T&gt; spec);//根据sql获取单个对象数据 List&lt;T&gt; findAll(Specification&l...

知识分享 5760

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring Data JPA 查询方法那些事

Spring Data 提供了几个接口供继承使用,如 JpaRepository,另外还规定了方法查询中的关键字,即你命名的查询方法需要符合规范。 详情参考:SpringBoot整合Spring Data JPA、SpringDataJPA入门。 本篇博文详细记录Spring Data JPA查询中的那些事。 【1】方法查询 ① 只要符号命名规范的接口都可以被正常解析使用 如下所示:...

小小默:进无止境 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring JPA之Specification复杂查询

lambda表达式中(root, query, builder)root, 代表的是数据库结构对象,可以获取到数据库实体对象相关属性等query 是获取和管理sql上查询的关键字接口,例如 query.select(), query.from(), query.where, query.grouyBy() 等, 对应selectfromwheregroup by。

mikelv01的博客 5975

Spring-Data-Jpa动态查询(Specification)

之后在repository包下新建一个。

2401_84048445的博客 1203

Spring Data JPA 的动态查询和一对多及多对多查询

1. Specifications动态查询 1.1JpaSpecificationExecutor 方法列表 T findOne(Specification spec); //查询单个对象 List findAll(Specification spec); //查询列表 //查询全部,分页 //pageable:分页参数 //返回值:分页pageBean(page:是springda...

weixin_43873712的博客 4336

Specification查询

Spring Data JPA 提供了-个Specifcation接口,Specification 接口封装了JPA的Criteria查询条件,从而可以通过此接口更加方便地使用Criteria查询。

m0_74137767的博客 562

【自我提升】Spring Data JPA之Specification动态查询详解

刷完Spring Data JPA的课后,发现Specification动态查询还挺有意思的,还应用到了规约设计模式,在此记录下学习过程和见解。Specification是一个设计模式,常常用于企业级应用开发中,其主要目的是将业务规则从业务逻辑中分离出来。在数据查询方面,Specification可以定义复杂的查询,使其更易于重用和测试。

習習君的博客 9437

spring-data-jpa之Specification使用exists和not exists

写在前面 spring-data-jpa是spring对hibernate框架的封装,如果你一开始熟悉的是mybatis,那么转到jpa可能会让你有些不适应。jpa的简单查询确实非常非常方便,但是对于复杂查询来说,jpa确实有点“复杂”。当然,你可以写原生sql,但是那样就违背了jpa操作对象、避免操作sql的出发点了。好,废话不多说,进入正题吧。 遇到的问题 原先是针对单表的列表查询操作,非常简单,所以就用了Specification来做: return (root, query, cri.

coderyjz的博客 7353

SpringDataJPA(三):多表操作,复杂查询

在实际开发中,我们数据库的表难免会有相互的关联关系,在操作表的时候就有可能会涉及到多张表的操作。有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。多对多关系中:用中间表(第三章表)来描述这种关系,中间表中至少应该由两个字段组成,这两个字段作为外键指向两张表的主键,且这两个字段又组成了联合主键。在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表。

you4580的专栏 3886

spring-data-jpa 实现子查询和复杂的关联查询总结

最近开发过程中,遇到了一个比较复杂的查询功能,查询条件有五六十个,每个条件可填可不填,要根据用户的输入条件查询结果,并且根据用户选中的字段返回对应的数据。 其中的查询条件里面大部分是 and的关系,有部分是互相之间是or的关系 所以查询逻辑里面牵扯到子查询和关联查询   1、spring-data-jpa 要实现 子查询,如下代码所示可以实现 //代码打印出的sql代码如下 /** ...

阳光的专栏 1万+
上一篇: SpringData Jpa 之 修改、删除数据
下一篇: Elasticsearch 下载 和 安装
☞十一
博客等级 码龄9年 8粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值