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

时间:2016-05-03 19:07:25

标签: spring hibernate jpa spring-data-jpa spring-orm

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

我遇到过“ Spring和Hibernate ”这个词。正如我可以解释的那样,它意味着将Spring Framework与Hibernate一起用作ORM工具/ JPA提供程序。

现在我遇到了“ Spring Data JPA ”。我澄清了有关Spring Data JPA的内容,它是JPA上的一个抽象层(并且引用了Spring Data JPA使用Hibernate或任何其他JPA提供程序)。

这些条款现在一样吗?也就是说,“ Spring + hibernate ”与“ Spring Data JPA ”相同。如果没有,那么差异/相似之处是什么?

我真的很困惑很多条款/声明(如上所述)看似相似,但可能会有所不同。

4 个答案:

答案 0 :(得分:53)

Spring-data-jpa,正如您所说,提供了更多仅仅是经典的Spring-JPA集成。使用JPA / Hibernate集成,主要是

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

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

  • 仅限接口的存储库,使用方法名称自动推断查询
  • @Query annotation定义接口方法应该返回的查询
  • 自动处理可分页查询
  • 标准crud存储库的基类

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

答案 1 :(得分:7)

当你谈到spring + hibernate时

  1. 如果您单独阅读hibernate,您会理解它使用映射(基本上配置pojo与数据库关系的映射)和配置(特定于数据库的配置,如驱动程序类,url,用户名,密码,方言等)。 / LI>
  2. 所以现在如果你想使用读,写,更新等,你必须得到hibernatesessionfactory,打开事务和提交。每项操作的前后工作很多。
  3. 当您将hibernate与spring集成时,spring使用此配置并将其保留在应用程序上下文中,并提供内部使用hibernatetemplate的{​​{1}}包装器。因此,在执行这些操作时,您不需要太在意前后代码。
  4. 它还提供了缓存(第一级和第二级缓存)以提高性能。
  5. 并且还让您使用独立于数据库的HQL。它使用数据库方言生成特定于数据库的SQL。
  6. 现在让我们谈谈spring + data jpa

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

答案 2 :(得分:1)

我发现this link有帮助:

  

JPA是Java Persistence API,它是Java用于对象关系映射的标准API。

     

JPA只是一个规范 - 您需要实现它才能使用它。 Hibernate是JPA中最着名和最常用的实现之一,但还有其他一些,例如EclipseLink JPA。

     

Spring Framework是一个大型框架,可帮助您更轻松地编写企业级软件。它包含对许多Java技术的支持,包括JPA。

     

Spring Framework由一组项目组成,其中一个项目是Spring Data。

     

Spring Data的目标是使其更容易使用不同类型的数据库,从传统的关系数据库到NoSQL数据库。 Spring Data通过Spring Data JPA子项目支持JPA。

     

要编写使用JPA的程序,至少需要一个JPA实现,例如Hibernate。

     

如果您正在为您的应用程序使用Spring Framework,那么您很可能希望将Spring Data JPA与Hibernate一起使用。

答案 3 :(得分:1)

Spring Data JPA不是JPA提供程序。它是一个库/框架,在我们的JPA提供程序(如Hibernate)的顶部增加了额外的抽象层。

因此,如果没有Hibernate,EclipseLink等JPA提供程序,就无法使用Spring Data。