开发者社区> meijm0103> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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



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

相关文章
springboot(五):spring data jpa的使用
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spring data jpa 开发时,发现国内对spring boot jpa全面介绍的文章比较少案例也比较零碎,因此写文章总结一下。本人也正在翻译Spring Data JPA
1694 0
使用Spring Data JPA访问关系型数据库
添加数据库和jpa依赖 定义实体对象 我们将定义一个实体对象UserApply并将其存储到关系型数据库中,并使用JPA注解: id作为唯一标识符,这里用到了JPA注解@GeneratedValue(strategy=GenerationType.IDENTITY)表明它是一个自增字段 firstName和lastName没有任何注解,但User注解为@Entity所以它们也被映射为同名的字段 创建对象访问方法 Spring Data JPA项目使用JPA注解将Java对象转化为关系型数据库中的记录。
918 0
Spring Data JPA WITH Kotlin
@Entity 注解的实体类,必须要有一个默认的无参构造函数。 否则: 异常消息: No default constructor for entity: : com.
1009 0
Spring Data JPA 介绍和使用
本文参考了Spring Data JPA官方文档,引用了部分文档的代码。 Spring Data JPA是Spring基于Hibernate开发的一个JPA框架。
1172 0
Spring Data Jpa 缓存
JPA仅仅只是一个规范,而不是产品;使用JPA本身是不能做到持久化的。所以,JPA只是一系列定义好的持久化操作的接口,在系统中使用时,需要真正的实现者,在这里,我们使用Hibernate作为实现者。
2943 0
Spring Data JPA 持久层开发
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bitree1/article/details/50014705 下面总结一...
806 0
Spring Data JPA开发手册——1.介绍
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/42737553 《Spring Data JPA开发手册——1.介绍》 作者:chszs,转载需注明。
900 0
Spring Data JPA开发手册——1.介绍
《Spring Data JPA开发手册——1.介绍》 我发现网上几乎没有讲述Spring Data JPA原理的文章,很多Guide一上来就是如何配置,接着就是几大段代码,没有一篇文章能把Spring Data JPA原理及构成说清楚的。
1136 0
+关注
meijm0103
知其然,知其所以然
69
文章
6
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载