1. 리포지토리 인터페이스 정의
1) 도메인 클래스별 리포지토리 인터페이스 정의
2) 인터페이스는 Repositoy를 확장(상속 받음) <도메인 클래스 타입, ID 타입>
3) 만약 CRUD 메서드를 노출하려면 CrudRepository를 확장(상속 받음)
2. 리포지토리 정의 미세 조정
1) 일반적으로 Repository 또는 CrudRepository 또는 PagingAndSortingRepository를 상속 받음
2) @RepositoryDefinition 어노테이션: Spring Data 인터페이스를 확장하지 않기
3) CrudRepository: Entity 조작을 위한 완전한 메서드 세트를 노출
@NoRepositoryBean // 이 어노테이션은 중간 리포지토리 인터페이스에 붙임, 붙이면 런타임에 인스턴스를 생성하지 않음
interface MyBaseRepository<T, ID> extends Repository<T, ID> {
Optional<T> findById(ID id); // ID로 찾는 메서드 노출
<S extends T> S save(S entity); // Entity를 저장하는 메서드 노출
}
interface UserRepository extends MyBaseRepository<User, Long> {
User findByEmailAddress(EmailAddress emailAddress);
}
'Spring > JPA' 카테고리의 다른 글
Spring JPA - 쿼리 조회 전략 (0) | 2022.10.14 |
---|---|
Spring JPA - 쿼리 메서드 정의 (0) | 2022.10.14 |
Spring JPA - 다양한 스프링 데이터 모듈과 함께 리포지토리 사용하기 (0) | 2022.10.13 |
Spring JPA - 쿼리 방법 (0) | 2022.10.13 |
Spring JPA - Spring data 저장소로 작업하기, 핵심 개념 (1) | 2022.10.13 |