我看到 Spring,JPA 围绕存储库工作(DAO 层:如果我没记错的话)。所以我的意思是使用“Spring JPA + Hibernate”或仅直接使用“Hibernate”有什么不同?
正如您所说,JPA是一种规范,而Hibernate是该规范的特定实现(这些实现通常称为Providers)。通过使用 Hibernate,您将自己与该提供者绑定在一起,从而限制了您在需要时切换到另一个选项的自由(例如,您想使用 EclipseLink 或 ObjectDB,因为 Hibernate 有一个错误会停止您的开发过程)。
引用Spring Data JPA的文档:
实施应用程序的数据访问层已经很麻烦了。必须编写太多样板代码。领域类是贫乏的,并且没有以真正的面向对象或领域驱动的方式设计。
使用这两种技术可以让开发人员在富域模型的持久性方面变得更加轻松。尽管如此,实现存储库的样板代码量仍然很高。因此 Spring Data 的存储库抽象的目标是显着减少为各种持久存储实现数据访问层的工作量。
总而言之,它在 JPA 之上添加了另一层抽象,类似于定义基于标准的设计以支持Spring 上下文中的持久层。那些定义的接口(Spring 已知)提供框架使用 JPA 处理的服务以提供结果。您以 Spring 可以扫描项目并找到它的方式定义存储库:
<repositories base-package="com.acme.repositories" />
因此,允许您在容器的上下文中或容器外部使用它。
现在究竟什么是 Spring,JPA。Spring,JPA 是否在 JPA 上添加了更多功能(接口),但它仍然是仅指定的,还是它也是 JPA 提供者?
Spring Data JPA 提供了一个定义,通过引用 JPA 规范,使用您定义的提供者来实现底层支持的存储库。