原标题:Spring认证|使用 Spring Data Repositories(上)
Spring Data repository 抽象的目标是显着减少为各种持久性存储实现数据访问层所需的样板代码量。
Spring Data 存储库文档和您的模块
本章解释了 Spring Data 存储库的核心概念和接口。本章中的信息来自 Spring Data Commons 模块。它使用 Java Persistence API (JPA) 模块的配置和代码示例。您应该将 XML 命名空间声明和要扩展的类型调整为您使用的特定模块的等效项。“命名空间参考”涵盖了所有支持存储库 API 的 Spring Data 模块都支持的 XML 配置。“存储库查询关键字”涵盖了存储库抽象支持的查询方法关键字。有关模块特定功能的详细信息,请参阅本文档中有关该模块的章节。
4.1. 核心概念
Spring Data 存储库抽象中的中心接口是Repository. 它需要域类来管理以及域类的 ID 类型作为类型参数。此接口主要用作标记接口,以捕获要使用的类型并帮助您发现扩展此接口的接口。该CrudRepository接口为正在管理的实体类提供复杂的 CRUD 功能。
示例 5.CrudRepository接口
public interface CrudRepository extends Repository {
S save(S entity);
Optional findById(ID primaryKey);
Iterable findAll();
long count();
void delete(T entity);
boolean existsById(ID primaryKey);
// … more functionality omitted.
保存给定的实体、返回由给定 ID 标识的实体、返回所有实体、返回实体的数量、删除给定的实体、指示具有给定 ID 的实体是否存在。
我们还提供特定于持久性技术的抽象,例如JpaRepository或MongoRepository。这些接口扩展CrudRepository,并露出下面的持久化技术在另外的能力,以比较通用的持久性与技术无关的接口,如CrudRepository。
在 之上CrudRepository,有一个PagingAndSortingRepository抽象,它添加了额外的方法来简化对实体的分页访问:
例 6.PagingAndSortingRepository界面
public interface PagingAndSortingRepository extends CrudRepository {
Iterable findAll(Sort sort);
Page findAll(Pageable pageable);
要访问User页面大小为 20的第二页,您可以执行以下操作:
PagingAndSortingRepository repository = // … get access to a bean
Page users = repository.findAll(PageRequest.of(1, 20));
除了查询方法,计数和删除查询的查询派生也是可用的。以下列表显示了派生计数查询的接口定义:
示例 7. 派生计数查询
interface UserRepository extends CrudRepository {
long countByLastname(String lastname);
}
以下清单显示了派生删除查询的接口定义:
示例 8. 派生删除查询
interface UserRepository extends CrudRepository {
long deleteByLastname(String lastname);
List removeByLastname(String lastname);
}
4.2. 查询方法
标准 CRUD 功能存储库通常对底层数据存储进行查询。使用 Spring Data,声明这些查询变成了一个四步过程:
声明一个扩展 Repository 或其子接口之一的接口,并将其键入它应该处理的域类和 ID 类型,如以下示例所示:
interface PersonRepository extends Repository { … }
在接口上声明查询方法。
interface PersonRepository extends Repository {
List findByLastname(String lastname);
}
设置 Spring 以使用JavaConfig或XML 配置为这些接口创建代理实例。
要使用 Java 配置,请创建一个类似于以下内容的类:
import org.springframe