📜  Spring Boot – CrudRepository 和 JpaRepository 的区别(1)

📅  最后修改于: 2023-12-03 15:05:15.821000             🧑  作者: Mango

Spring Boot – CrudRepository 和 JpaRepository 的区别

在 Spring Boot 中,有两个重要的接口,CrudRepository 和 JpaRepository,它们都是用于数据访问的接口。虽然它们都能够进行 CRUD 操作(Create、Read、Update 和 Delete),但它们之间还是有一些区别的。

CrudRepository

CrudRepository 是 Spring Framework 中定义的一个接口,它提供了一组通用的方法来进行 CRUD 操作。它的实现类 SimpleJpaRepository 使用了 JPA 提供的标准实现,可以用于对 JPA 实体进行操作。CrudRepository 中定义的主要方法有:

  • save:保存实体
  • findOne:根据 ID 查询实体
  • findAll:查询所有实体
  • delete:删除实体
  • count:统计实体总数

CrudRepository 通过泛型来指定要操作的实体类型和实体 ID 的类型。例如,以下代码创建了一个 CrudRepository 接口,用于对 Book 实体进行操作:

public interface BookRepository extends CrudRepository<Book, Long> {
}
JpaRepository

JpaRepository 是 Spring Data JPA 中定义的一个接口,它继承自 CrudRepository,因此它也可以进行 CRUD 操作。JpaRepository 中新增了一些方法,用于更方便地进行数据访问,如:

  • getOne:根据 ID 获取一个实体,不会立即加载实体对象
  • findAllById:根据 ID 集合查询实体列表
  • saveAndFlush:保存实体并立即持久化到数据库
  • findAll(Specification):根据查询条件查询实体列表

JpaRepository 提供了对 JPA 实体的访问和查询支持,同时它也可以使用 JPA 的 Criteria API 进行查询。以下代码创建了一个 JpaRepository 接口,用于对 Book 实体进行操作:

public interface BookRepository extends JpaRepository<Book, Long> {
}
总结
  • CrudRepository 和 JpaRepository 都是用于 JPA 实体的数据访问接口。
  • CrudRepository 是 Spring Framework 中定义的接口,它定义了一组通用的 CRUD 操作方法。
  • JpaRepository 继承自 CrudRepository,它新增了一些方便的操作方法,支持 JPA 的 Criteria API。
  • 如果需要进行基本的 CRUD 操作,可以使用 CrudRepository;如果需要更复杂的操作,比如带查询条件的查询,可以使用 JpaRepository。