개발/Spring Data JPA(KYH)

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

잇(IT) 2023. 7. 26. 12:58
728x90

- 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동으로 생성한다.

- 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많다.

- 스프링 데이터 JPA 인터페이스의 메서드를 직접 구현하고 싶다면 사용자 정의 인터페이스를 사용해야 한다.

 - JPA 직접 사용(EntityManager)

 - 스프링 JDBC Template 사용

 - MyBatis 사용

 - 데이터베이스 커넥션 직접 사용 등등...

 - Querydsl


- 사용자 정의 인터페이스

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

 

- 사용자 정의 인터페이스 구현 클래스

@RequiredArgsConstructor
public class MemberRepositoryImpl implements MemberRepositoryCustom{

    private final EntityManager em;

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

- MemberRepositoryImpl은 MemberRepositoryCustom 인터페이스의 구현체이다.

- 스프링 데이터 JPA에서 EntityManger를 직접 사용하고 싶을 때 메서드를 직접 정의하여 스프링 데이터 JPA에 상속 시켜 사용한다.

 

- MemberRepositoryCustom 상속

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

 

- Test 코드

@SpringBootTest
@Transactional
@Rollback(value = false)
class MemberRepositoryTest {

    @Autowired
    MemberRepository memberRepository;

    @Autowired
    TeamRepository teamRepository;

    @PersistenceContext
    EntityManager em;
    ...


@Test
    public void callCustom() {
        List<Member> result  = memberRepository.findMemberCustom();
    }

- JPQL을 통해 정상적으로 쿼리를 실행하는 것을 확인할 수 있다.


- 사용자 정의 구현 클래스 명명 규칙

1. 리포지토리 인터페이스 이름  + Impl -> MemberRepositoryImpl

2. 스프링 데이터 JPA가 인식해서 스프링 빈으로 등록한다.

 

 

 

 

 

 

 

 

 

 

 

출처 : 인프런 - 김영한(실전! 스프링 데이터 JPA)

728x90