kse*_*ker 603 java spring jpa spring-data spring-data-jpa
Spring Data JPA CrudRepository和JpaRepository接口有什么区别?
当我在网上看到这些例子时,我看到它们在那里可以互换使用.他们之间有什么区别?你为什么要用一个而不是另一个?
Ken*_*han 831
JpaRepository延伸PagingAndSortingRepository,反过来延伸CrudRepository.
他们的主要职能是:
CrudRepository 主要提供CRUD功能.PagingAndSortingRepository 提供进行分页和排序记录的方法.JpaRepository 提供了一些与JPA相关的方法,例如刷新持久化上下文和批量删除记录.由于上面提到的继承, JpaRepository将所有的功能CrudRepository和PagingAndSortingRepository.因此,如果您不需要存储库来提供JpaRepository和提供的功能PagingAndSortingRepository,请使用CrudRepository.
Oli*_*ohm 372
肯的答案基本上是正确的,但我想谈谈"你为什么要用一个而不是另一个?" 你问题的一部分.
您为存储库选择的基本接口有两个主要用途.首先,您允许Spring Data存储库基础结构找到您的接口并触发代理创建,以便将接口实例注入客户端.第二个目的是在界面中引入尽可能多的功能,而不必声明额外的方法.
Spring Data核心库附带了两个基本接口,它们公开了一组专用功能:
CrudRepository - CRUD方法PagingAndSortingRepository- 分页和排序方法(扩展CrudRepository)各个商店模块(例如,用于JPA或MongoDB)公开这些基本接口的特定于商店的扩展,以允许访问特定于商店的功能,例如刷新或专用批处理,其中考虑了一些商店细节.这方面deleteInBatch(…)的一个例子JpaRepository不同于delete(…)它使用查询删除给定的实体,这些实体性能更高但带有不触发JPA定义的级联的副作用(正如规范定义的那样).
我们通常建议不要使用这些基接口,因为它们将底层持久性技术暴露给客户端,从而加强它们与存储库之间的耦合.另外,您从存储库的原始定义中获得了一点点,该存储库基本上是"实体集合".所以,如果可以的话,坚持下去PagingAndSortingRepository.
直接依赖于所提供的基本接口之一的缺点是双重的.它们都可能被认为是理论上的,但我认为重要的是要注意:
Page或Pageable代码中的抽象.Spring Data与commons-lang或Guava等任何其他通用库没有任何不同.只要它提供合理的利益,就可以了.CrudRepository,您可以立即公开一组完整的持久性方法.在大多数情况下这也许很好,但是你可能会遇到你想要对方法公开进行更细粒度控制的情况,例如创建一个ReadOnlyRepository不包括方法save(…)和delete(…)方法的方法CrudRepository.这两个缺点的解决方案是制作您自己的基础存储库接口甚至是一组它们.在很多应用程序中,我看到过这样的事情:
interface ApplicationRepository<T> extends PagingAndSortingRepository<T, Long> { }
interface ReadOnlyRepository<T> extends Repository<T, Long> {
// Al finder methods go here
}
Run Code Online (Sandbox Code Playgroud)
第一个存储库接口是一些通用基本接口,实际上只修复了第1点,但也将ID类型绑定Long为一致性.第二个接口通常具有find…(…)从中复制的所有方法CrudRepository,PagingAndSortingRepository但不会公开操作的方法.在参考文档中阅读有关该方法的更多信息.
存储库抽象允许您选择完全由您的架构和功能需求驱动的基础存储库.如果它们适合,使用开箱即用的那些,必要时制作您自己的存储库基础接口.除非不可避免,否则请远离商店特定的存储库接口.
Job*_*ews 70
摘要:
PagingAndSortingRepository扩展了CrudRepository
JpaRepository扩展了PagingAndSortingRepository
该CrudRepository接口提供了CRUD操作方法,所以它可以让你创建,读取,更新和删除记录,而不必定义自己的方法.
该PagingAndSortingRepository提供更多的方法来检索使用分页和排序实体.
最后,JpaRepository添加了一些特定于JPA的功能.
Pan*_*kos 19
spring-data-jpa 3.xspring-data-jpa 3.x与spring-boot 3.x和 一起使用时spring-core 6.x,
结构和层次结构已被修改,似乎更加清晰。
ListCrudRepository延伸CrudRepository
ListPagingAndSortingRepository延伸PagingAndSortingRepository
JpaRepository延伸两者ListCrudRepository,ListPagingAndSortingRepository.
ListPagingAndSortingRepository因此,基本上,新引入的接口ListCrudRepository现在代表旧接口的功能,但具有返回类型,而List<T>其余的则处理返回类型PagingAndSortingRepositoryCrudRepositoryIterable<T>
在新的(3.x)版本中,结构如下:
在过去(3.0 之前),许多返回的已声明方法List<T>都是直接在 中声明的JpaRepository,但现在这些方法具有单独的接口,它们已被提取到ListPagingAndSortingRepository,中ListCrudRepository。
所以(3.x)之前的结构是
我希望从上面的模式中可以清楚地看到提到的JpaRepository和CrudRepository是如何在版本中修改的3.x。
如果您计划从into迁移spring-data-jpa(如果您从to迁移则有必要),如上面的模式所示,您应该预期在代码中使用了 the 的情况下会出现破坏代码,就像过去它是从因此,您的自定义存储库直接扩展了已经可以访问. 如果这是问题,您应该通过调整自定义存储库以扩展或.2.x3.xspring-boot 2.xspring-boot 3.xPagingAndSortingRepositoryCrudRepositoryPagingAndSortingRepositoryCrudRepositoryListCrudRepositoryCrudRepository
Ani*_*rgi 18
下面是之间的差异CrudRepository和JpaRepositoryas:
CrudRepositoryCrudRepository是一个基本接口并扩展了该Repository接口。CrudRepository 主要提供CRUD(Create、Read、Update、Delete)操作。saveAll()方法的返回类型是Iterable。CrudRepository.JpaRepositoryJpaRepository 延伸 PagingAndSortingRepository即延伸CrudRepository。JpaRepository提供 CRUD 和分页操作,以及其他方法,例如flush(),saveAndFlush()、 和deleteInBatch()等。saveAll()方法的返回类型是List.JpaRepository。Spring Data JPA 中的 CrudRepository 和 JpaRepository 接口有什么区别?
Spring Data JPA 提供JpaRepository和CrudRepository接口来简化基于 JPA 的应用程序中数据访问的存储库的创建。
CrudRepository是具有基本 CRUD(创建、读取、更新、删除)操作的实体的基本接口。CrudRepository提供了一组最小的方法,例如save()、findAll()、findById()、delete()等,并且可以通过其他自定义方法进行扩展。
这是代码示例:
public interface PersonEntityRepository extends CrudRepository<PersonEntity, Long> {
}
Run Code Online (Sandbox Code Playgroud)
JpaRepository接口扩展CrudRepository接口。
JpaRepository接口为 CrudRepository 提供的基本 CRUD 操作提供了其他附加方法,例如:
findAll(Sort sort)- 返回按给定条件排序的所有实体的方法。findAll(Pageable pageable)- 根据给定的分页和排序标准返回实体页面的方法。flush() - 刷新数据库中所有挂起的更改的方法。saveAndFlush(T entity)- 保存实体并立即将更改刷新到数据库的方法。这是代码示例:public interface PersonEntityRepository extends JpaRepository<PersonEntity, Long> {
List<TestEntity> findByName(String name);
List<Employee> findByAgeGreaterThan(double age);
}
Run Code Online (Sandbox Code Playgroud)
为什么你想使用其中一种而不是另一种?
两者之间的选择取决于您的应用程序的具体需求。我建议使用CrudRepository用于基本 CRUD 操作的接口,以及JpaRepository用于更高级功能的接口,例如分页、排序和立即刷新数据库更改。
所有答案都为问题提供了足够的细节。不过,让我补充一点。
我们为什么使用这些接口:
哪个接口做什么:
何时使用哪个接口:
根据http://jtuts.com/2014/08/26/difference- Between-crudrepository-and-jparepository-in-spring-data-jpa/
一般来说,最好的想法是使用CrudRepository或PagingAndSortingRepository,具体取决于您是否需要排序和分页。
如果可能的话,应该避免使用JpaRepository ,因为它将您的存储库与 JPA 持久性技术联系在一起,并且在大多数情况下,您甚至可能不会使用它提供的额外方法。
| 归档时间: |
|
| 查看次数: |
223092 次 |
| 最近记录: |