首页 > 解决方案 > Spring Data JPA 和 Hibernate

问题描述

Spring Data JPA 不是 JPA 实现,它是对数据库数据访问的抽象。在与 JPA 的实现(比如 Hibernate)进行比较的领域中,我无法理解这个表达式。使用 Spring Data JPA 时,要使用 CRUD 操作,您必须从 CrudRepository 接口扩展。但是没有 Hibernate,Spring Data JPA 不能独立工作,因为它不能将 java 对象转换为实体。但!Hibernate 也可以执行 CRUD 操作。所以问题是: 1. 如果我们仍然需要使用 HIBERNATE,为什么开发人员使用 Spring Data JPA(准确地说是 CRUD 操作)?2. CrudRepository 接口只是一个接口,它是从“Repository”接口扩展而来的。我们在 CRUD 类中对其进行扩展以实现 CRUD 操作。我不明白它是如何工作的。我们的类如何能够简单地通过扩展接口来执行 CRUD 操作。没有实现的方法。 我现在该如何回答这些问题:

  1. 是为了简化代码。由于通过 Hibernate 使用 CRUD 操作需要更多代码。
  2. 目前,脑海中只有一些想法,即以某种(“神奇的”)方式,CrudRepository 接口使用标准的 Hibernate 工具来使用 CRUD 操作。

标签: javahibernatespring-data-jpa

解决方案


JPA 是一种规范,它指定了一组标准的类、方法、注释、约定等,用于将 Java 对象映射到关系数据库。

Hibernate 是本规范的实现之一。它实现了 JPA 规范中定义的所有内容。

Spring Data JPA 是一个使用 JPA 的框架,因此需要 JPA(Hibernate 或任何其他)的实现才能使用。它是建立在标准 JPA 规范之上的抽象层。

如果我们仍然需要使用 HIBERNATE,为什么开发人员使用 Spring Data JPA(精确的 CRUD 操作)?

因为 Spring-Data-JPA 使得在 Spring 应用程序中使用 JPA 变得容易,并且更容易定义存储库:所有基本操作,如果您不使用 Spring-Data-JPA,通常必须手动编写, 框架已经为您实现了。它基于约定和声明性查询,为您实现方法,这使事情变得更快、更安全、编写起来更简单。

我不明白它是如何工作的。我们的类如何简单地通过扩展接口来执行 CRUD 操作

它使用动态代理:在运行时,它使用反射来检查存储库接口中定义的所有附加方法,并创建一个动态代理,即实现该接口并使用标准 JPA API 实现接口中定义的方法的类. 这是一个比较高级的话题。谷歌“Java 动态代理”让您入门。但是您也可以只使用框架而无需自己编写,就像您使用计算机而不了解电子设备的工作原理一样。


推荐阅读