- 스프링 데이터 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
'Programming > Spring' 카테고리의 다른 글
Spring Data JPA - Web 확장 (도메인 클래스 컨버터, 페이징과 정렬) (0) | 2023.07.26 |
---|---|
Spring Data JPA - Auditing (0) | 2023.07.26 |
Spring Data JPA - @EntityGraph (0) | 2023.07.26 |
Spring Data JPA - (벌크성 수정 쿼리) (0) | 2023.07.26 |
Spring Data JPA - 페이징과 정렬 (0) | 2023.07.25 |