Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

사용자 정의 Repository 본문

인프런/[인프런] Spring Data JPA

사용자 정의 Repository

Seung__ 2021. 8. 30. 22:55

1. 사용자 정의 Repository


  • 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고
  • 구현체는 스프링이 자동 생성함.
  • 해당  인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음...
  • 인터페이스의 메서드를 직접 구현하고 싶다면?
    • JPA 직접 사용( EntityManager )
    • 스프링 JDBC Template 사용
    • MyBatis 사용
    • 데이터베이스 커넥션 직접 사용 등등...
    • Querydsl 사용 등등

 

 

 

2, custom Repository 생성하기


  • 사용자 정의 구현 클래스
  • 규칙: 리포지토리 인터페이스 이름 + Impl --> 필수!!
  • 이름이 맞아야 스프링 데이터 JPA가 인식해서 ~~Impl을 스프링 빈으로 등록이 가능.
  • 그래야 memberRepository 에서 MemberRepositoryCustom에 있는 method를 사용할 때
    구현체를 찾아서 사용할 수 있다. --> 스프링이 지원

  • MemberRepositoryCustom
public interface MemberRepositoryCustom {

    List<Member> findMemberCustom();
}
  • MemberRepositoryImpl
@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
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
  • Test
 @Test
    public void callCustom(){
        List<Member> memberCustom = memberRepository.findMemberCustom();
    }

 

3. 참고


  • 실무에서는 주로 QueryDSL이나 SpringJdbcTemplate을 함께 사용할 때 사용자 정의
    리포지토리 기능 자주 사용
  •  항상 사용자 정의 리포지토리가 필요한 것은 아니다. 그냥 임의의 리포지토리를 만들어도 된다.
    예를들어 MemberQueryRepository를 인터페이스가 아닌 클래스로 만들고 스프링 빈으로 등록해서
    그냥 직접 사용해도 된다. 물론 이 경우 스프링 데이터 JPA와는 아무런 관계 없이 별도로 동작한다
  • 스프링 데이터 2.x 부터는 사용자 정의 구현 클래스에 사용자 정의 인터페이스 명 + Impl 지원
  • MemberRepositoryImpl 대신에 MemberRepositoryCustomImpl도 가능.
  • 더욱 직관적임.

 

3. GitHub : 210830 CustomRepository


 

GitHub - bsh6463/SpringDataJpa

Contribute to bsh6463/SpringDataJpa development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] Spring Data JPA' 카테고리의 다른 글

Web 확장 : 도메인 클래스 컨버터, 페이징 & 정렬  (0) 2021.08.31
Auditing  (0) 2021.08.30
JPA Hint & Lock  (0) 2021.08.29
@EntityGraph  (0) 2021.08.29
Query Method, 벌크성 수정 쿼리  (0) 2021.08.29
Comments