Spring Data JPA和Hibernate

Мак*_*кий 1 java hibernate spring-data-jpa

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

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

JB *_*zet 5

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

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

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

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

因为Spring-Data-JPA使得从Spring应用程序中使用JPA变得容易,并且使定义存储库变得更加容易:所有基本操作,如果不使用Spring-Data-JPA,则通常必须手工编写已由框架为您实现。基于约定和声明性查询,它为您实现了方法,使编写过程变得更快,更安全且更省力。

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

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