コアコンセプト
Spring Data リポジトリ抽象化の中心的なインターフェースは Repository
です。管理するドメインクラスと、ドメインクラスの識別子の型を型引数として取ります。このインターフェースは主に、操作する型をキャプチャーし、このインターフェースを継承するインターフェースを検出するのに役立つマーカーインターフェースとして機能します。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);
}
エンティティ状態検出戦略
次の表は、エンティティが新しいかどうかを検出するために Spring Data が提供する戦略を説明しています。
|
By default, Spring Data inspects the identifier property of the given entity.
If the identifier property is |
|
If a property annotated with |
Implementing | エンティティが 注: |
カスタム | モジュール固有のリポジトリファクトリのサブクラスを作成し、 |