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

Cur*_*ind 41 spring hibernate jpa spring-orm spring-data-jpa

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

我遇到过" Spring and Hibernate " 这个词.我可以解释它意味着将Spring Framework与Hibernate一起用作ORM工具/ JPA提供程序.

现在我遇到了" Spring Data JPA ".我澄清了有关Spring Data JPA的内容,它是JPA的一个抽象层(在Spring Data JPA下使用Hibernate或任何其他JPA提供程序).

现在这些术语是一样的吗?也就是说," Spring + hibernate "与" Spring Data JPA "相同.如果没有,那么差异/相似之处是什么?

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

JB *_*zet 54

正如您所说,Spring-data-jpa提供了更多仅仅是经典的Spring-JPA集成.通过JPA/Hibernate集成,您主要得到

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

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

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

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

  • 是.但您也可以将Spring与任何JPA提供程序一起使用,而无需使用Spring-data-jpa. (5认同)
  • 非常感谢你的回复.所以当我们看到"Spring + Hibernate"时,它意味着Spring直接使用Hibernate,而当我们看到"Spring Data JPA"时,它意味着使用spring数据jpa抽象和jpa提供者可以是任何东西(如Hibernate,eclipselink等)和Spring数据jpa提供更多内容,您在回复中已经提到了很少. (2认同)

Bha*_*lav 7

当你谈到spring + hibernate时

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

现在让我们谈谈spring + data jpa

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