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



目录
相关文章
|
2月前
|
NoSQL Java 数据库连接
《深入理解Spring》Spring Data——数据访问的统一抽象与极致简化
Spring Data通过Repository抽象和方法名派生查询,简化数据访问层开发,告别冗余CRUD代码。支持JPA、MongoDB、Redis等多种存储,统一编程模型,提升开发效率与架构灵活性,是Java开发者必备利器。(238字)
|
2月前
|
存储 Java 关系型数据库
Spring Boot中Spring Data JPA的常用注解
Spring Data JPA通过注解简化数据库操作,实现实体与表的映射。常用注解包括:`@Entity`、`@Table`定义表结构;`@Id`、`@GeneratedValue`配置主键策略;`@Column`、`@Transient`控制字段映射;`@OneToOne`、`@OneToMany`等处理关联关系;`@Enumerated`、`@NamedQuery`支持枚举与命名查询。合理使用可提升开发效率与代码可维护性。(238字)
328 1
存储 JSON Java
527 0
|
3月前
|
SQL Java 数据库连接
Spring Data JPA 技术深度解析与应用指南
本文档全面介绍 Spring Data JPA 的核心概念、技术原理和实际应用。作为 Spring 生态系统中数据访问层的关键组件,Spring Data JPA 极大简化了 Java 持久层开发。本文将深入探讨其架构设计、核心接口、查询派生机制、事务管理以及与 Spring 框架的集成方式,并通过实际示例展示如何高效地使用这一技术。本文档约1500字,适合有一定 Spring 和 JPA 基础的开发者阅读。
372 0
|
5月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
589 2
|
6月前
|
Java API 数据库
JPA简介:Spring Boot环境下的实践指南
上述内容仅是JPA在Spring Boot环境下使用的冰山一角,实际的实践中你会发现更深更广的应用。总而言之,只要掌握了JPA的规则,你就可以借助Spring Boot无比丰富的功能,娴熟地驾驶这台高性能的跑车,在属于你的程序世界里驰骋。
234 15
|
7月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
250 32
|
8月前
|
NoSQL 安全 Java
深入理解 RedisConnectionFactory:Spring Data Redis 的核心组件
在 Spring Data Redis 中,`RedisConnectionFactory` 是核心组件,负责创建和管理与 Redis 的连接。它支持单机、集群及哨兵等多种模式,为上层组件(如 `RedisTemplate`)提供连接抽象。Spring 提供了 Lettuce 和 Jedis 两种主要实现,其中 Lettuce 因其线程安全和高性能特性被广泛推荐。通过手动配置或 Spring Boot 自动化配置,开发者可轻松集成 Redis,提升应用性能与扩展性。本文深入解析其作用、实现方式及常见问题解决方法,助你高效使用 Redis。
860 4
|
8月前
|
SQL Java 编译器
深入理解 Spring Data JPA 的导入与使用:以 UserRepository为例
本文深入解析了 Spring Data JPA 中 `UserRepository` 的导入与使用。通过示例代码,详细说明了为何需要导入 `User` 实体类、`JpaRepository` 接口及 `@Repository` 注解。这些导入语句分别用于定义操作实体、提供数据库交互方法和标识数据访问组件。文章还探讨了未导入时的编译问题,并展示了实际应用场景,如用户保存、查询与删除操作。合理使用导入语句,可让代码更简洁高效,充分发挥 Spring Data JPA 的优势。
482 0
|
SQL Java 数据库
6.2 Spring Boot集成jpa
6.2 Spring Boot集成jpa Java持久化API(JPA,Java Persistence API)是一个将对象映射为关系数据库的标准技术。
1122 0

热门文章

最新文章