Spring Data JPA - 사용자 정의 리포지토리 구현

2022. 7. 31. 20:41·공부/JPA
반응형

출처 : 인프런 실전! 스프링 데이터 JPA

Spring Data JPA 게시글은 대부분 인프런의 김영한님의 강의인 '실전! 스프링 데이터 JPA' 기반으로 내용을 정리했습니다.

 

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

사용자 정의 리포지토리 구현은 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하기에는 구현해야 하는 기능이 너무 많다. 그래서 그 중에 뽑아서 몇 개만 구현하고 싶거나, 혹은 JPA가 아닌 다른 Mybatis 등의 다른 리포지토리를 같이 쓰고 싶을 때 사용한다.

사용자 정의 리포지토리를 만드려면 일단 인터페이스 하나를 생성해야 한다.

  • MemberRepositoryCustom.interface
public interface MemberRepositoryCustom {

    List<Member> findMemberCustom();
}

 

그리고 이 인터페이스를 구현하는 구현 클래스를 생성해야 한다.

  • MemberRepositoryCustomImpl.class
@RequiredArgsConstructor
public class MemberRepositoryImpl implements MemberRepositoryCustom{

    private final EntityManager em;

    @Override
    public List<Member> findMemberCustom() {
        return em.createQuery("select m from Member m")
                .getResultList();
    }
}

그리고 MemberRepository가 Custom의 존재와 내부 메서드를 알아야하니 MemberRepository에서 Custom을 상속 받도록 한다.

  • MemberRepository.interface
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
  • MemberRepositoryTest.class
@Test
public void callCustom() {
    List<Member> result = memberRepository.findMemberCustom();
}​
    select
        member0_.member_id as member_i1_0_,
        member0_.age as age2_0_,
        member0_.team_id as team_id4_0_,
        member0_.username as username3_0_ 
    from
        member member0_

잘 실행이 되는 걸 확인할 수 있다. 쉽게 실행할 수 있는데 한 가지 중요한 점이 있다. 바로 구현 클래스인 MemberRepositoryImpl.class는 이름에 규칙이 있다. MemberRepository(리포지토리 인터페이스 이름) + Impl을 맞춰줘야한다. 이 규칙만 맞추면 스프링 데이터 JPA가 인식해서 스프링 빈으로 등록한다.

! 실무에서는 주로 QueryDSL이나 SpringJdbcTemplate을 함께 사용할 때 사용자 정의 리포지토리 기능을 사용한다.

 

 

Impl 말고 다른 이름으로 변경

XML 설정

<repositories base-package="study.datajpa.repository"
		repository-impl-postfix="Impl" />

JavaConfig 설정

@EnableJpaRepositories(basePackage=
	"study.datajpa.repository",
    repositoryImplementationPostfix="Impl")

위의 두 가지 방법이 있지만 웬만해서는 그냥 일반적인 관례를 따르는 게 좋다.

 

최신 버전의 사용자 정의 리포지토리

스프링 데이터 2.x 부터는 사용자 정의 인터페이스 명 + Impl 방식도 스프링 빈으로 알아서 스프링 데이터 JPA 올린다. 위의 예제를 가져와 설명하자면 MemberRepositoryImpl말고 MemberRepositoryCustomImpl이 가능하다는 얘기이다. 후자의 이름 규칙을 사용하는 것이 개발하기에 더 직관적이므로 이 방식을 사용하는 것을 권장.

 
반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/JPA' 카테고리의 다른 글
  • Spring Data JPA - Web 확장-도메인 클래스 컨버터
  • Spring Data JPA - Auditing
  • Spring Data JPA - JPA Hint & Lock
  • Spring Data JPA - @EntityGraph
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    기출문제
    프로그래머스
    백준
    전자정부프레임워크
    방통대
    react
    에러해결
    프론트엔드
    개발자
    운영체제
    IT
    JPA
    토비의스프링부트
    알고리즘
    인프런
    코딩테스트
    springboot
    스프링부트
    QueryDSL
    자바스크립트
    SQL
    oracle
    egov
    Spring
    RESTful
    MSA
    넥사크로
    토이프로젝트
    SpringBoot를 이용한 RESTful Web Service 개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
Spring Data JPA - 사용자 정의 리포지토리 구현
상단으로

티스토리툴바