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



目录
相关文章
|
4月前
|
druid Java 数据库连接
SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis
SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis
62 0
|
4月前
|
XML Java 数据库连接
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
46 0
|
4月前
|
Java Spring
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
72 0
|
4月前
|
SQL Java 关系型数据库
spring data elasticsearch 打印sql(DSL)语句
spring data elasticsearch 打印sql(DSL)语句
155 0
|
1月前
|
Java 数据库 Spring
如何使用Spring Data JPA完成审计功能
如何使用Spring Data JPA完成审计功能
|
3月前
|
Java 数据库连接 API
Spring Boot整合Spring Data JPA进行CRUD和模糊查询
Spring Boot整合Spring Data JPA进行CRUD和模糊查询
37 0
|
4月前
|
缓存 NoSQL Java
Spring Data Redis对象缓存序列化问题
在使用 Redis 时,有没有遇到同我一样,对象缓存序列化问题的呢?
67 6
Spring Data Redis对象缓存序列化问题
|
4月前
|
存储 Java 数据库连接
Spring Boot 嵌入式服务器、Hibernate 关系和 Spring Data 全解析
Spring Boot 的嵌入式服务器功能是一项方便而强大的功能,它允许你在应用程序中直接运行 Web 服务器,无需将其部署到单独的独立 Web 服务器中。这使得开发、测试和部署 Web 应用程序变得容易,而且它还是轻量级的、易于启动和停止的,易于配置。
64 0
|
4月前
|
存储 Java 网络架构
Spring Data Elasticsearch基础入门详解
Spring Data Elasticsearch基础入门详解
119 0
|
4月前
|
SQL Java Spring
Spring Data JPA之JpaSpecificationExecutor复杂动态查询实例
Spring Data JPA之JpaSpecificationExecutor复杂动态查询实例
31 0