创建使用Java Persistence API的存储库是一个繁琐的过程,需要大量时间,并且需要大量样板代码。 通过执行以下步骤,我们可以消除一些样板代码:
- 创建一个抽象的基础存储库类,该类为实体提供CRUD操作。
- 创建扩展抽象基础存储库类的具体存储库类。
这种方法的问题在于,我们仍然必须编写用于创建数据库查询并调用它们的代码。 更糟的是,每次要创建新的数据库查询时,我们都必须这样做。 这是浪费时间 。
如果我告诉您我们可以创建JPA存储库而无需编写任何样板代码,您会怎么说?
很有可能您可能不相信我,但是Spring Data JPA可以帮助我们做到这一点。 Spring Data JPA项目的网站指出 :
实现应用程序的数据访问层已经很长一段时间了。 为了执行简单查询以及执行分页和审核,必须编写太多样板代码。 Spring Data JPA旨在通过将工作量减少到实际需要的数量来显着改善数据访问层的实现。 作为开发人员,您将编写包括自定义finder方法在内的存储库接口,Spring会自动提供实现
这篇博客文章介绍了Spring Data JPA。 我们将学习Spring Data JPA的真正含义,并快速浏览一下Spring Data存储库接口。
让我们开始吧。
什么是Spring Data JPA?
Spring Data JPA不是JPA提供程序 。 它是一个库/框架,在我们的JPA提供程序的顶部添加了额外的抽象层。 如果我们决定使用Spring Data JPA,则我们应用程序的存储库层包含以下三层:
- Spring Data JPA通过扩展Spring Data存储库接口为创建JPA存储库提供支持。
- Spring Data Commons提供了特定于数据存储的Spring Data项目共享的基础结构。
- JPA Provider实现Java Persistence API。
下图说明了存储库层的结构:
补充阅读:
- Spring Data JPA与JPA:有什么区别?
乍一看,Spring Data JPA似乎使我们的应用程序变得更加复杂。 它的确在我们的存储库层中增加了一层,但是与此同时,它使我们无需编写任何样板代码。
听起来这是一个不错的权衡。 对?
Spring数据存储库简介
Spring Data JPA的功能在于由Spring Data Commons项目提供并由特定于数据存储的子项目扩展的存储库抽象。
我们可以使用Spring Data JPA而不用注意存储库抽象的实际实现,但是我们必须熟悉Spring Data存储库接口。 这些接口描述如下:
首先 ,Spring Data Commons项目提供以下接口:
- Repository <T,ID扩展为Serializable>接口是一个标记接口,具有两个用途:
- 它捕获托管实体的类型和实体ID的类型。
- 它有助于Spring容器在类路径扫描期间发现“具体的”存储库接口。
- CrudRepository <T,ID扩展为Serializable>接口为受管实体提供CRUD操作。
- PagingAndSortingRepository <T,ID扩展为Serializable>接口声明用于对从数据库中检索到的实体进行排序和分页的方法。
- QueryDslPredicateExecutor <T>接口不是“存储库接口”。 它声明使用QueryDsl 谓词对象从数据库检索实体的方法。
其次 ,Spring Data JPA项目提供以下接口:
- JpaRepository <T,ID扩展为Serializable>接口是JPA特定的存储库接口,它将公共存储库接口声明的方法组合在单个接口后面。
- JpaSpecificationExecutor <T>接口不是“存储库接口”。 它声明使用通过使用JPA标准API的Specification <T>对象从数据库检索实体的方法。
存储库层次结构如下所示:
很好,但是我们如何使用它们呢?
这是一个公平的问题。 本教程的下一部分将回答该问题,但实际上我们必须遵循以下步骤:
- 创建一个存储库接口,并扩展Spring Data提供的存储库接口之一。
- 将自定义查询方法添加到创建的存储库界面(如果需要的话)。
- 将存储库接口注入到另一个组件,并使用Spring自动提供的实现。
让我们继续并总结从这篇博客文章中学到的知识。
摘要
这篇博客文章教会了我们两件事:
- Spring Data JPA不是JPA提供者。 它只是“隐藏”了其存储库抽象之后的Java Persistence API(和JPA提供程序)。
- Spring Data提供了多个用于不同目的的存储库接口。
本教程的下一部分描述了如何获取所需的依赖关系。
如果您想了解更多有关Spring Data JPA的信息,请阅读我的Spring Data JPA教程 。
翻译自: https://www.javacodegeeks.com/2014/12/spring-data-jpa-tutorial-introduction.html