项目中,有的地方存值以逗号分隔的方式来存储,但查询的时候是需要满足单个值或者多个值条件查询,因此用到Specification中and、or组合使用,此文用来记录,以防后用。

描述:
parentCode逗号分隔,同一parentCode下有且只能有一个名称相同的标签对象,新增传值parentCode逗号分隔,可多个,用下面查询方法来做校验。

    private List<LabelInfo> getDimensionList(LabelInfo labelInfo) {
Specification<LabelInfo> specification = (Root<LabelInfo> root, CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) -> {
//parentCode条件拆分组装
String[] parentCodes = labelInfo.getParentCode().split(",");
List<Predicate> predicates1 = new ArrayList<>();
for (String parentCode : parentCodes) {
if (!StringUtil.isNullStr(parentCode)) {
Predicate pred = criteriaBuilder.like(root.get("parentCode"), "%" + parentCode + "%");
predicates1.add(pred);
}
}
//or条件组合
Predicate predicateOr = criteriaBuilder.or(predicates1.toArray(new Predicate[predicates1.size()]));
predicateOr = criteriaBuilder.and(predicateOr);
//and条件组合
List<Predicate> predicates = new ArrayList<>();
predicates.add(criteriaBuilder.equal(root.get("level"), 3));
predicates.add(criteriaBuilder.like(root.get("name"), "%" + labelInfo.getName() + "%"));
Predicate predicateAnd = criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
//组合查询
return query.where(predicateOr, predicateAnd).getRestriction();
};
return labelInfoRepository.findAll(specification);
}

Spirng Data JPA 之Specification中and、or的使用的更多相关文章

  1. spring data jpa封装specification实现简单风格的动态查询

    github:https://github.com/peterowang/spring-data-jpa-demo 单一实体的动态查询: @Servicepublic class AdvancedUs ...

  2. Spring Data JPA 在 @Query 中使用投影的方法

    Spring Data JPA 在 @Query 中使用投影的方法 关于投影的基本使用可以参考这篇文章:https://www.baeldung.com/spring-data-jpa-project ...

  3. 使用Spring Data JPA的Specification构建数据库查询

    Spring Data JPA最为优秀的特性就是可以通过自定义方法名称生成查询来轻松创建查询SQL.Spring Data JPA提供了一个Repository编程模型,最简单的方式就是通过扩展Jpa ...

  4. 【spring data jpa】repository中使用@Query注解使用hql查询,使用@Param引用参数,报错:For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on

    在spring boot中, repository中使用@Query注解使用hql查询,使用@Param引用参数 如题报错: For queries with named parameters you ...

  5. Spring data jpa 实现简单动态查询的通用Specification方法

    本篇前提: SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法 这篇文章中的第二种方法 实现Specification 这块的方法 只适用于一个对象针对某一个固定字 ...

  6. SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法

    软件152 尹以操 首先谢谢大佬的简书文章:http://www.jianshu.com/p/45ad65690e33# 这篇文章中讲的是spring中使用spring data jpa,使用了xml ...

  7. Spring Data Jpa:分页、Specification、Criteria

    分页的主要接口与类 PagingAndSortingRepository 继承自 CrudRepository 接口,提供了排序以及分页查询能力,提供了两个方法 Iterable<T> f ...

  8. spring data jpa Specification动态查询

    package com.ytkj.entity; import javax.persistence.*; import java.io.Serializable; /** * @Entity * 作用 ...

  9. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  10. Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页

    本博客介绍基于Spring Data这款orm框架加上Jquery.pagination插件实现的分页功能. 介绍一下Spring Data框架 spring Data : Spring 的一个子项目 ...

随机推荐

  1. USB PD和USB TYPE-C 的区别

    USB Power Delivery (USB PD) 和 USB Type-C 是两个不同但相关的技术标准,它们在功能和应用上有所区别. 1. USB Type-C 连接器标准: USB Type- ...

  2. Java日期时间API系列35-----Jdk8中java.time包中的新的日期时间API类应用,微秒和纳秒等更精确的时间格式化和解析。

    通过Java日期时间API系列1-----Jdk7及以前的日期时间类中得知,Java8以前除了java.sql.Timestamp扩充纳秒,其他类最大只精确到毫秒:Java8 time包所有相关类都支 ...

  3. js中有哪些定时器 , 它们的用法和区别?

    js有setInterval() 间隔函数 和 setTimeout()延迟函数 2 种定时器 1. setInterval间隔函数 setInterval() 方法可按照指定的周期(以毫秒计)来调用 ...

  4. Vue 组件如何进行传值的?

    1 父子传值 在子组件标签设置属性,在子组件内使用 props 接收属性值 : 2. 子父传值 在子组件中使用 emit 自定义事件,在子组件标签注册自定义事件 ,接收参数 : 3. vuex 状态管 ...

  5. Vue3的生命周期函数

        选项式 API 组合式API beforeCreate 不需要 created  不需要 beforeMount onBeforeMount mounted onMounted beforeU ...

  6. 10 Self-Attention(自注意力机制)

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  7. 用sdkman管理多个jdk切换

    前言 最近项目前后端进行升级,需要在jdk8和jdk17两个版本切换.最简单的是通过手动切换,但切换过程太繁琐,修改环境变量,达到切换目的.于是尝试其它解决方案,最终确实使用sdkman工具. sdk ...

  8. 云原生爱好者周刊:GitHub 官方文档终于开源了!

    云原生一周动态要闻: API 在 Kubernetes 1.22 中被删除 ContainIQ 公开发布 - Kubernetes 本地实时监控! Sophos 收购 Capsule8 开源项目推荐 ...

  9. CSS动画(登录页面)

    1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa6Pfop3IiakrZOtiaiaKniaxeH2Gs407DmkXPsMo8AFKdsYib ...

  10. 了解 Uniswap V2(DEX)

    Uniswap V2 是一个基于以太坊的去中心化交易所(DEX),它通过流动性池和自动化做市商(AMM)模型来实现去中心化的代币交换.以下是 Uniswap V2 的核心概念: 1. 自动化做市商(A ...