Spring Data-JPA与JPA:有什么区别?

我对Spring Data-JPA和JPA之间的区别有些困惑。 我知道关于JPA,它是使用stream行的ORM技术将Java对象持久化到关系数据库的规范。也就是说,JPA提供了接口和其他ORM技术,实现了被称为JPA提供者的接口,例如Hibernate。

现在到底什么是Spring Data JPA。 Spring Data JPA是否通过JPA添加了一些更多的function(接口),并且仍然只是指定的,或者它也是JPA提供者?

我看到Spring Data JPA在存储库(DAO层:如果我没有错的话)工作。 所以我的意思是使用“Spring Data JPA + Hibernate”或仅使用“Hibernate”指导是如何不同?

我看到了Spring,JPA在库的周围工作(DAO层:如果我没有错的话)。 所以我的意思是,如何使用“Spring JPA + Hibernate”或直接使用“Hibernate”是不同的?

正如你所说, JPA是一个规范,Hibernate是该规范的特定实现(这些实现通常被称为提供者 )。 通过使用Hibernate,您可以将自己绑定到该提供程序上,以便在需要时限制您自由切换到另一个选项(例如,由于Hibernate有一个可阻止开发过程的bug,因此您希望使用EclipseLink或ObjectDB)。

引用Spring Data JPA的文档:

实现应用程序的数据访问层已经有一段时间了。 必须编写太多的样板代码。 领域类贫乏,并没有被devise成真正的面向对象或领域驱动的方式。

使用这两种技术使开发人员在富域模型的持久性方面变得更容易。 不过,实现知识库的样板代码量还是相当高的。 因此,Spring Data存储库抽象的目标是大大减less为各种持久存储实现数据访问层的工作量。

综上所述,JPA增加了另外一层抽象层,就是定义一个基于标准的devise来支持Spring上下文中的持久层 。 那些已定义的接口(Spring已知)提供了框架使用JPA处理结果的服务。 您可以通过Spring可以扫描项目并find它的方式定义一个存储库:

<repositories base-package="com.acme.repositories" /> 

因此,允许您在容器的上下文中或外部使用它。

现在到底什么是Spring,JPA。 是spring,JPA已经添加了一些更多的JPAfunction(接口),仍然只是指定或它也是一个JPA提供程序?

Spring Data JPA提供了一个定义来实现通过引用JPA规范,使用您定义的提供程序引擎支持的存储库。

Java持久性API(有时称为JPA)是一种Java框架,用于pipe理使用Java平台标准版(JavaSE)和Java平台企业版(JavaEE)的应用程序中的关系数据。

在这方面的坚持包括三个方面:

  • API本身,在javax.persistence包中定义。

  • Java持久性查询语言(JPQL)。

  • 对象关系元数据。

    在这里输入图像说明

Spring Data JPA是Spring Data项目的一部分,它使得实现基于JPA的存储库更容易。

特征:

  • 基于Spring和JPA构build存储库的完善支持
  • 支持QueryDSL谓词,从而支持types安全的JPA查询
  • 域类的透明审计
  • 分页支持,dynamic查询执行,集成自定义数据访问代码的能力
  • 在引导时validation@Query注释的查询
  • 支持基于XML的实体映射
  • 引入@EnableJpaRepositories基于JavaConfig的存储库configuration

    在这里输入图像说明