最新の安定バージョンについては、Spring Data Commons 3.5.5 を使用してください! |
コアコンセプト
Spring Data リポジトリ抽象化の中心的なインターフェースは Repository です。これは、管理するドメインクラスと、ドメインクラスの識別子型を型引数として受け取ります。このインターフェースは主に、操作する型をキャプチャーし、このインターフェースを継承するインターフェースを見つけるのに役立つマーカーインターフェースとして機能します。
Spring Data では、ドメイン型をエンティティ、より具体的には集約と見なします。そのため、ドキュメント全体で「エンティティ」という用語が使用されていますが、これは「ドメイン型」または「集約」という用語と置き換えることができます。 すでにお気づきかもしれませんが、導入部でドメイン駆動の概念について触れています。DDD の意味でドメインオブジェクトを検討します。ドメインオブジェクトには識別子があり (そうでない場合は、これらは ID のない値オブジェクトになります)、データにアクセスするために特定のパターンを操作するときに、何らかのメソッドで識別子を参照する必要があります。リポジトリとクエリメソッドについて説明すると、識別子の参照がより意味を持ちます。 |
CrudRepository (Javadoc) および ListCrudRepository (Javadoc) インターフェースは、管理対象のエンティティクラスに高度な CRUD 機能を提供します。
CrudRepository インターフェース public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity); (1)
Optional<T> findById(ID primaryKey); (2)
Iterable<T> findAll(); (3)
long count(); (4)
void delete(T entity); (5)
boolean existsById(ID primaryKey); (6)
// … more functionality omitted.
}| 1 | 指定されたエンティティを保存します。 |
| 2 | 指定された ID で識別されるエンティティを返します。 |
| 3 | すべてのエンティティを返します。 |
| 4 | エンティティの数を返します。 |
| 5 | 指定されたエンティティを削除します。 |
| 6 | 指定された ID のエンティティが存在するかどうかを示します。 |
このインターフェースで宣言されたメソッドは、一般に CRUD メソッドと呼ばれます。ListCrudRepository は同等のメソッドを提供しますが、CrudRepository メソッドが Iterable を返すのに対し、それらは List を返します。
リポジトリインターフェースには、プロパティ名に関係なくドメイン型識別子プロパティをターゲットとする
|
また、JpaRepository や MongoRepository などの永続化技術固有の抽象化も提供します。これらのインターフェースは CrudRepository を継承し、CrudRepository などのかなり汎用的な永続化テクノロジーにとらわれないインターフェースに加えて、基礎となる永続化テクノロジーの機能を公開します。 |
CrudRepository に加えて、エンティティへのページ分割されたアクセスを容易にする追加のメソッドを追加する PagingAndSortingRepository (Javadoc) および ListPagingAndSortingRepository (Javadoc) があります。
PagingAndSortingRepository インターフェース public interface PagingAndSortingRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}| 拡張インターフェースは、実際のストアモジュールによってサポートされる必要があります。このドキュメントでは一般的なスキームについて説明していますが、ストアモジュールが使用したいインターフェースをサポートしていることを確認してください。 |
20 のページサイズで User の 2 番目のページにアクセスするには、次のようなことができます。
PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(PageRequest.of(1, 20));ListPagingAndSortingRepository は同等のメソッドを提供しますが、PagingAndSortingRepository メソッドが Iterable を返すのに対し、List を返します。
クエリメソッドに加えて、カウントクエリと削除クエリの両方のクエリ派生を使用できます。次のリストは、派生カウントクエリのインターフェース定義を示しています。
interface UserRepository extends CrudRepository<User, Long> {
long countByLastname(String lastname);
}次のリストは、派生削除クエリのインターフェース定義を示しています。
interface UserRepository extends CrudRepository<User, Long> {
long deleteByLastname(String lastname);
List<User> removeByLastname(String lastname);
}