开发者社区> meijm0103> 正文

SpringBoot-Spring Data Jpa使用(二)

简介:
+关注继续查看

JpaSpecificationExecutor简介

spring data jpa中负责jpa查询的接口,封装了常用的基于对象查询的各种方法,与第一篇中介绍的几种查询方式相比最大优势是是可以动态指定查询条件,但是查询结果目测只能以实体进行封装。

接口说明

  • JpaSpecificationExecutor接口说明
接口名称 说明
Optional findOne(@Nullable Specification spec); 查询一个实体
List findAll(@Nullable Specification spec); 指定查询条件查询
Page findAll(@Nullable Specification spec, Pageable pageable); 分页查询
List findAll(@Nullable Specification spec, Sort sort); 排序查询
long count(@Nullable Specification spec); 查询总数

注意事项:通过上面的接口我们会发现一个很诡异的问题,就是分页查询和排序好像不能同时存在,其实Pageable是有多个实现的,除了通常只有关于分页的查询之外还有一个PageRequest,这个类可以支持排序和分页共存。使用方法为PageRequest.of(int page, int size, Sort sort);

  • Specification接口说明 
    这个接口下包含一个接口用于构建查询条件
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder);

还有4个静态方法,静态方法分别是where,not,and,or参数为Specification.当查询条件可复用时可专门构建一个产生查询条件的工厂,并在查询时使用静态方法进行连接。

JPA查询说明

  • 参数说明: 
    参数Root:查询根,join ,fetch深度获取,当属性为集合时使用 
    参数CriteriaQuery:查询主体,可增加groupBy,distinct,having, 
    参数CriteriaBuilder:构建查询条件及一些基础函数 
    返回值Predicate:条件组合

本来想写一些具体的例子,发现一个大神整理的jpa api用法汇总,就不献丑了。

其他

  • spirng boot jpa中获取EntityManager,获取之后可以在service中使用原生jpa代码构建jpql
@Autowired
 private JpaContext jpaContext;
 public EntityManager getEm(){
  return jpaContext.getEntityManagerByManagedType(实体类.class);
 }
  • 简化jpa语法的工具包,有兴趣可以研究下
    1. QueryDSL介绍官网,官方支持功能强大,包也大。。
    2. jpa-spec介绍github,大神写的工具包,包小,简化构建Predicate 方法。

参考资料

https://www.baeldung.com/rest-api-search-language-spring-data-specifications 
http://www.importnew.com/24514.html 
https://lufficc.com/blog/spring-boot-jpa-querydsl 
http://www.cnblogs.com/xingqi/p/3929386.html



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
「Spring和Kafka」Kafka深挖第3部分:Kafka和Spring Cloud data Flow
「Spring和Kafka」Kafka深挖第3部分:Kafka和Spring Cloud data Flow
10 0
「首席架构师看事件流架构」Kafka深挖第3部分:Kafka和Spring Cloud data Flow
「首席架构师看事件流架构」Kafka深挖第3部分:Kafka和Spring Cloud data Flow
10 0
BXA
Spring Data JPA简化数据访问
Spring Data JPA是基于JPA规范的一个Spring Data模块,为开发者提供了一组通用的、具有一致性的API,使得对于多种数据存储的访问变得容易。它不仅简化了JPA应用开发,还提供了许多特性,如自定义方法、查询构造、分页和排序等。
22 0
BXA
Spring Data Redis实现高性能缓存
随着互联网的普及Web应用的开发变得越来越普遍。然而,随着应用规模和用户数量的增加也会面临越来越多的性能问题。Web应用性能的瓶颈通常出现在以下几个方面: - 数据库查询和写入延迟 - 网络传输延迟 - 高并发请求压力
17 0
Spring Data默认值的错误
Spring Data有很多配置的默认值,但不一定都适合你。如一个依赖Cassandra 的项目,有时写入数据后,并不能立马读到。这种错误并没有什么报错,一切都是正常的,就是读不到数据。
18 0
用好 DDD 必须先过 Spring Data 这关
用好 DDD 必须先过 Spring Data 这关
32 0
Spring Data Elasticsearch 5.0升级指南
Spring Data Elasticsearch 5.0升级指南
388 0
Spring Data 简介
Spring Data的使命是为数据访问提供一个熟悉且一致的,基于Spring的编程模型
53 0
Spring Data JPA中常用的注解详解
我们先看看类前面的两个注解
63 0
【Elasticsearch】整合Spring Data Elasticsearch(二)
【Elasticsearch】整合Spring Data Elasticsearch
116 0
+关注
meijm0103
知其然,知其所以然
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多