스프링데이터 JPA - 사용자 정의 레퍼지토리 구현

2021. 2. 7. 23:25JPA/SPRING DATA JPA

사용자 정의 레퍼지토리

  • 스프링데이터 JPA는 레퍼지토리만 인터페이스로 정의해두면 스프링데이터 JPA 규칙에 따라 해당 레퍼지토리 인터페이스를 구현하지 않아도 스프링이 내부적으로 구현클래스를 생성하여 제공해준다.
  • 하지만 다양한 이유로 인해서 레퍼지토리의 구현을 직접 해야할 필요가 있을 수 있다.
  1. JPA 직접 사용(EntityManager)
  2. 스프링 JDBC Template 사용
  3. MyBatis 사용
  4. 데이터베이스 커넥션 직접 사용
  5. Querydsl 사용
  • 그래서 스프링데이터 JPA에서는 사용자 정의 레퍼지토리를 구현할 수 있는 방법을 제공한다.
  • 먼저 메인 레퍼지토리와는 별개로 사용자 정의 레퍼지토리를 따로 인터페이스로 정의 한다.
  • 해당 레퍼지토리를 구현하는 클래스를 만든다
  • 이때 구현 클래스명에 명명 규칙이 있다.
  • 메인 레퍼지토리명 + "Impl" 또는 사용자 정의 레퍼지토리명 + "Impl"(스프링 데이터 2.x 부터 지원 - 권장)
  • 메인 레퍼지토리는 사용자 정의 레퍼지토리를 상속 받는다.
  • 해당 방법으로 구현하면 메인 레퍼지토리로 구현한 메서드를 사용할 수 있다.
//사용자 정의 레퍼지토리 + Impl
@RequiredArgsConstructor
public class RepositoryCustomImpl implements RepositoryCustom {
	private final EntityManager em;
	
    ...
}

// 또는!!

//메인 레퍼지토리 + Impl
@RequiredArgsConstructor
public class MainRepositoryImpl implements RepositoryCustom {
	private final EntityManager em;
	
    ...
}

//사용자 정의 레퍼지토리 상속
public interface MainRepository extends JpaRepository<Entity, Long>, RepositoryCustom {
	...
}