본문 바로가기

Spring/JPA

Spring JPA - 리포지토리 정의

 

 

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);
}