首页 > Java > Spring Data JPA 中的 CrudRepository 和 JpaRepository 接口有什么区别?

Spring Data JPA 中的 CrudRepository 和 JpaRepository 接口有什么区别?

上一篇 下一篇

Spring Data JPA 中的 CrudRepository 和 JpaRepository 接口有什么区别?

当我在网上看到这些例子时,我看到它们在那里可以互换使用。

它们之间有什么区别?

为什么要使用一个而不是另一个?

分割线

网友回答:

Ken的回答基本上是正确的,但我想插话“你为什么要使用一个而不是另一个?”部分。

基本

您为存储库选择的基本接口有两个主要目的。首先,您允许 Spring 数据存储库基础架构找到您的接口并触发代理创建,以便您将接口的实例注入客户端。第二个目的是根据需要将尽可能多的功能引入接口,而无需声明额外的方法。

通用接口

Spring 数据核心库附带了两个基本接口,它们公开了一组专用的功能:

  • CrudRepository– 克鲁德方法
  • PagingAndSortingRepository– 分页和排序方法(扩展CrudRepository)

特定于商店的接口

单个存储模块(例如,用于JPA或MongoDB)公开了这些基本接口的特定于存储的扩展,以允许访问特定于存储的功能,例如刷新或专用批处理,这些功能考虑了一些存储细节。这方面的一个例子是不同的,因为它使用查询来删除给定的实体,后者性能更高,但附带的副作用是不触发 JPA 定义的级联(如规范定义的那样)。deleteInBatch(…)JpaRepositorydelete(…)

我们通常建议不要使用这些基本接口,因为它们向客户端公开了底层持久性技术,从而加强了它们与存储库之间的耦合。另外,您有点偏离存储库的原始定义,该定义基本上是“实体集合”。所以如果可以的话,请留下来.PagingAndSortingRepository

自定义存储库基本接口

直接依赖于提供的基本接口之一的缺点是双重的。它们都可能被认为是理论上的,但我认为它们很重要:

  1. 根据 Spring 数据存储库接口,将您的存储库接口与库耦合。我不认为这是一个特定的问题,因为无论如何你都会在你的代码中使用抽象。Spring Data 与任何其他通用库(如 commons-lang 或 Guava)没有任何不同。只要它提供合理的利益,就没问题。PagePageable
  2. 通过扩展例如CrudRepository,您可以立即公开一套完整的持久性方法。在大多数情况下,这可能也没问题,但您可能会遇到希望对公开的方法进行更细粒度控制的情况,例如,创建一个不包含 和 的方法。ReadOnlyRepositorysave(…)delete(…)CrudRepository

这两个缺点的解决方案是制作自己的基本存储库界面,甚至是一组。在很多应用程序中,我都看到过这样的东西:

interface ApplicationRepository<T> extends PagingAndSortingRepository<T, Long> { }

interface ReadOnlyRepository<T> extends Repository<T, Long> {

  // Al finder methods go here
}

第一个存储库接口是一些通用的基本接口,它实际上只修复了第 1 点,但也将 ID 类型绑定在一起以保持一致性。第二个接口通常复制了所有方法,但不公开操作方法。在参考文档中阅读有关该方法的更多信息。Longfind…(…)CrudRepositoryPagingAndSortingRepository

总结 – 博士

存储库抽象允许您选择完全由您的架构和功能需求驱动的基本存储库。如果适合,请使用开箱即用的接口,如有必要,请创建自己的存储库基本接口。除非不可避免,否则请远离特定于商店的存储库接口。

分割线

网友回答:

JpaRepository扩展,进而扩展.PagingAndSortingRepositoryCrudRepository

其主要功能是:

  • CrudRepository主要提供CRUD功能。
  • PagingAndSortingRepository提供对记录进行分页和排序的方法。
  • JpaRepository提供一些与 JPA 相关的方法,例如刷新持久性上下文和批量删除记录。

由于上面提到的继承,将具有和的所有功能。因此,如果您不需要存储库具有 和 提供的功能,请使用 。JpaRepositoryCrudRepositoryPagingAndSortingRepositoryJpaRepositoryPagingAndSortingRepositoryCrudRepository

分割线

网友回答:

在此处输入图像描述

总结:

  • PagingAndSortingRepository 扩展了 CrudRepository
  • JpaRepository 扩展了 PagingAndSortingRepository

CrudRepository 接口提供了用于 CRUD 操作的方法,因此它允许您创建、读取、更新和删除记录,而无需定义自己的方法。

分页和排序存储库提供了使用分页和排序检索实体的其他方法。

最后,JpaRepository 添加了更多特定于 JPA 的功能。

模板简介:该模板名称为【Spring Data JPA 中的 CrudRepository 和 JpaRepository 接口有什么区别?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 331次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-04
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信图片 响应式 微信公众平台 自适应 微信模板 html5 单页式简历模板 微信素材 企业网站 微信文章
您可能会喜欢的其他模板