ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Data JPA - 사용자 정의 리포지토리 구현
    Spring/Spring Data JPA 2022. 3. 21. 10:47
    728x90
    반응형

     

     

     

    사용자 정의 리포지토리 구현

     

    • Spring Data JPA에서 제공하는 JpaRepository 인터페이스는 스프링이 구현체를 자동으로 생성해준다.
    • Spring Data JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 메서드들이 너무 많다.
    • 사용자 정의 리포지토리 구현 - JpaRepository의 메서드들을 오버라이드 안 해도 된다.
    • 인터페이스의 메서드를 직접 구현 - 사용자 정의 리포지토리 사용
                 - JPA 직접 사용
                 - 스프링 JDBC Template 사용
                 - MyBatis 사용
                 - 데이터베이스 커넥션 직접 사용 등
                 - Querydsl 사용

     

     

     

    사용자 정의 리포지토리 구현

     

     

     

    1. 사용자 정의 인터페이스 생성

    public interface MemberRepositoryCustom {
        List<Member> findMemberCustom();	
    }

     

    2. 사용자 정의 인터페이스의 구현 클래스 생성

            - 스프링 데이터 JPA가 자동으로 스프링 빈 등록

            주의 - 사용자 정의 인터페이스명 + Impl인 클래스명으로 생성해야 한다.

    @RequiredArgsConstructor
    public class MemberRepositoryImpl implements MemberRepositoryCustom {
        private final EntityManager em;
        
        @Override
        public List<Member> findMemberCustom() {
            return em.createQuery("select m from Member m")
            .getResultList();
        }
    }

     

    3. 사용자 정의 인터페이스 상속

    public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
    }

     

     

     

     

    참고

     

     핵심 비즈니스 로직에 관련되면 사용자 정의 인터페이스를 만들어서 상속하면 되지만 핵심 비즈니스 로직에 관련이 없고 특정 화면에서 사용되는 경우라면 인터페이스가 아닌 클래스로 만들어서 스프링 빈으로 등록해 사용하는 것이 좋다. 위에서 예시로 든 사용자 정의 인터페이스가 아닌 클래스로 만들면 다음과 같다.

     

    @Repository
    @RequiredArgsContructor
    publuc class MemberQueryRepository {
    
    	private final EntityManager em;
        
    	List<Member> findAllMembers() {
        	retrun em.createQuery("select m from Member m")
            		.getResultList();
    	}
    }
    728x90
    반응형

    댓글

Designed by Tistory.