JPA 和 Spring Data JPA 有什么区别?

我对 Spring Data-JPA 和 JPA 之间的区别有点困惑。我知道 JPA 是一个规范,用于使用流行的 ORM 技术将 Java 对象持久化到一个关系数据库。

换句话说,JPA 提供接口和其他 ORM 技术,实现那些被称为 JPA 提供者的接口,例如 Hibernate。

现在,Spring Data JPA 到底是什么?

Spring Data JPA 是否在 JPA 之上添加了更多的功能(接口) ,并且仍然只指定它或者它也是 JPA 提供者?

我看到 Spring Data JPA 围绕存储库工作(DAO 层: 如果我没有错的话)。那么,我的意思是,使用‘ Spring Data JPA + Hibernate’或者只使用‘ Hibernate’指导有什么不同呢?

97096 次浏览

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

这种情况下的持久性包括三个方面: < br >

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

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

  • 对象-关系元数据。

    enter image description here

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

特点:

  • 基于 Spring 和 JPA 构建存储库的复杂支持
  • 支持 QueryDSL 谓词,从而支持类型安全的 JPA 查询
  • 域类的透明审计
  • 分页支持,动态查询执行,集成自定义数据访问代码的能力
  • 在引导时验证 @Query注释查询
  • 支持基于 XML 的实体映射
  • 通过引入 @EnableJpaRepositories,基于 JavaConfig 的存储库配置

    enter image description here

我看到 Spring,JPA 围绕存储库工作(DAO 层: 如果我没有错的话)。所以我的意思是,使用‘ Spring JPA + Hibernate’或者直接使用‘ Hibernate’有什么不同?

如前所述,JPA规格,而 冬眠是该规范的特定实现(这些实现通常称为 供应商)。通过使用 Hibernate,您将自己绑定到那个提供程序,限制您在需要时切换到其他选项的自由(例如,您希望使用 EclipseLink 或 ObjectDB,而不是 Hibernate,因为 Hibernate 有一个 bug 会中止您的开发过程)。

引用 Rel = “ noReferrer”> Spring Data JPA ’s文件:

实现应用程序的数据访问层已经很麻烦了。必须编写太多的样板代码。领域类是贫血的,并且没有以真正的面向对象或领域驱动的方式设计。

在富域模型的持久性方面,使用这两种技术使开发人员的生活变得容易得多。尽管如此,实现存储库的样板代码的数量,尤其是仍然相当高。因此,Spring Data 存储库抽象的目标是大大减少为各种持久化存储实现数据访问层的工作量。

总而言之,它在 JPA 之上添加了另一层抽象,类似于定义了一种基于标准的设计,以便在 Spring 上下文中支持 持久层。这些已定义的接口(Spring 知道)提供框架使用 JPA 处理的服务,以便为结果提供服务。用 Spring 可以扫描项目并找到的方式定义存储库:

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

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

到底什么是 Spring,JPA。是 Spring,JPA 在 JPA 上添加了更多的功能(接口) ,但是仍然只指定了它还是它也是 JPA 提供者?

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

JPA

JPA 是一个规范,它标准化了 Java 对象映射到关系数据库系统的方式。作为一个规范,JPA 由一组接口(如 EntityManagerFactoryEntityManager和注释)组成,这些接口可以帮助您将 Java 实体对象映射到数据库表。

有几个 JPA 提供程序,如 HIbernate、 EclipseLink 或 OpenJPA,您可以使用它们。

Spring Data JPA

Spring Data JPA 是一个 JPA 数据访问抽象。就像 JPA 一样,SpringDataJPA 在没有 JPA 提供程序的情况下不能工作。

SpringDataJPA 为 DDD Repository模式DAO (Data Acess Object) pattern提供了一种解决方案。它还可以通过方法名约定代表您生成 JPA 查询。

Spring Data JPA 可以与 Hibernate、 Eclipse Link 或任何其他 JPA 提供程序一起工作。使用 Spring 或 JavaEE 的一个非常有趣的好处是,您可以使用 @Transactional注释以声明方式控制事务边界。

Jpa 是 java 的一个规范,用于在 java 对象和关系数据库之间保存数据。 Spring data jpa-它和 jpa 的意思一样,我们可以用下面的方式来描述。 Spring Data Jpa 是 Jpa 的抽象化访问,这意味着它喜欢 Jpa,但它添加了一些额外的功能,没有 Jpa,我们就无法实现 Spring Data Jpa。