Spring + hibernate 与 Spring Data JPA:它们有什么不同吗?

Spring + hibernate versus Spring Data JPA: Are they different?

虽然不是新手,但我正在尝试学习 spring 框架(再次!)以确保我真正理解这一点。我对核心 Spring (DI) 有很好的想法。现在,我专注于数据层。

我遇到过术语“Spring 和 Hibernate”。正如我所理解的那样,这意味着使用 Spring Framework 和 Hibernate 作为 ORM tool/JPA 提供者。

现在我遇到了“Spring Data JPA”。我在 SO 上澄清了 Spring Data JPA,它是 JPA 之上的抽象层(并且在幕后 Spring Data JPA 使用 Hibernate 或任何其他 JPA 提供程序)。

现在这些术语相同吗?也就是说,“Spring + hibernate”与“Spring Data JPA”相同。如果不是,那么有什么区别/相似之处?

我真的很困惑这么多terms/statements(像上面)看似相似,但可能不同。

正如您所说,

Spring-data-jpa 提供的不仅仅是经典的 Spring-JPA 集成。通过 JPA/Hibernate 集成,您主要获得

  • 使用 JPA/Hibernate 事务的声明式事务管理
  • 异常翻译
  • JPA EntityManager 或 Hibernate SessionFactory 作为可注入 bean

使用 Spring-data-jpa,您可以获得所有这些,加上(除其他外)

  • 仅接口存储库,使用方法名称自动推断查询
  • @Query注解定义接口方法应该进行的查询return
  • 自动处理可分页查询
  • base 类 用于标准 crud 存储库

这只是一个简短的介绍。如需更多帮助,请阅读文档。

当你谈论 spring + hibernate

  1. 如果你单独阅读 hibernate,你会理解它使用映射(它基本上配置用于将 pojo 与数据库关系映射)和配置(特定于数据库的配置,如驱动程序 class,url,用户名、密码、方言等)。
  2. 所以现在如果您想使用读取、写入、更新等,您必须获取 hibernatesessionfactory、打开事务并提交。每个操作都有很多预置和 post 工作。
  3. 当您将 hibernate 与 spring 集成时,spring 使用此配置并将其保存在应用程序上下文中,并提供内部使用 hibernatesessionfactoryhibernatetemplate 包装器。所以你在做这些操作时不需要太在意pre和post代码。
  4. 它还提供了缓存(一级和二级缓存)以提高性能。
  5. 还可以让您使用独立于 database.It 的 HQL 使用数据库方言生成特定于数据库的 sql。

现在让我们谈谈 spring + 数据 jpa

  1. 它带有基本存储库接口(来自 spring 数据通用,spring jpa)
  2. 所以假设你有兴趣做 crud 操作,只需扩展 crud repository,spring 将在 运行 时注入它的实现。
  3. 假设您想为您的应用程序定义通用方法,您可以通过创建扩展 Repository 接口的新存储库接口来实现。并且可以在整个应用程序中使用它。
  4. 它还提供查询方法,让您可以使用原生 sql or jpql.

我发现 this link 有帮助:

JPA is the Java Persistence API, which is Java's standard API for object-relational mapping.

JPA is only an specification - you need an implementation of it to be able to use it. Hibernate is one of the most well-known and most used implementations of JPA, but there are others, such as EclipseLink JPA.

The Spring Framework is a large framework to help you write enterprise-grade software easier. It contains support for many Java technologies, including JPA.

The Spring Framework consists of a collection of projects, and one of these projects is Spring Data.

The goal of Spring Data is to make it easier to work with different kinds of databases, from traditional relational databases to NoSQL databases. Spring Data supports JPA via the Spring Data JPA subproject.

To write a program that uses JPA, you need at least a JPA implementation, such as Hibernate.

If you are using the Spring Framework for your application, you will most likely want to use Spring Data JPA together with Hibernate.

Spring Data JPA 不是 JPA 提供程序。它 library/framework 在我们的 JPA 提供程序(如 Hibernate)之上添加了一个额外的抽象层。

因此,如果没有 Hibernate、EclipseLink 等 JPA 提供程序,您将无法使用 Spring 数据