繁体   English   中英

Spring Data JPA和Hibernate

[英]Spring Data JPA and Hibernate

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操作。

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动态代理”帮助您入门。 但是,您也可以只使用框架而无需自己编写框架,就像使用计算机而不了解电子设备的工作原理一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM