본문 바로가기

dev/Spring

spring data jpa 사용자 정의 repository

프로젝트를 하며 spring data jpa를 사용하는데, 직접 메소드를 구현하고 싶었다.

DB에 데이터를 입력하기 전에 처리하고 싶은 작업이 있었는데, 쿼리가 복잡할 것 같기 때문이었다.

검색해 보니 이 경우 커스텀 레포지토리를 정의하여 사용하면 된다고 한다.


물론 JpaRepository 인터페이스를 통째로 구현하는 방법도 있지만..

간단히 JpaRepository가 제공하는 기능을 사용하되, 커스텀 기능을 추가하는 방법을 조사했다.


1. 커스텀 레포지토리 인터페이스를 작성한다.

public interface CustomEmpRepository {

public List<Emp> customMethod();

}

2. 1에서 작성한 인터페이스를 구현하는 클래스를 작성한다.

- 이 클래스의 이름은 default spring data jpa repository 명 + impl 형태로 한다. (이렇게 해야 자동 인식된다)

- imple 대신 다른 접미사를 사용하고자 할 경우 다음과 같이 설정할 수 있다.

<repositories base-package = "mypackage.repository" repository-impl-postfix="able"/>

또는 @EnableJpaRepositories(basePackage="mypackage.repository" RepositoryImplementationPostfix="able")

public class EmpRepositoryImpl implements CustomEmpRepository {

// 빨간색 표시된 부분은 default spring jpa repository 명이다(CustomEmpRepositoryImpl로 하면 인식 안된다!)

// 파란색 표시된 부분은 1에서 정의한 인터페이스다.

@Override

public List<Emp> customMethod(){ ... }

}


3. 해당 엔티티의 repository를 만들면서 JpaRepository와 함께 앞서 만든 인터페이스를 상속받는다.


public class EmpRepository extends JpaRepository<Emp,Long>,CustomEmpRepository {

}


[참조]

(JPA 강좌)Spring data jpa 사용자정의 레포지터리, Custom Repository