사용자 정의 리포지토리 구현 (실무에서 중요)
스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동생성하는 방식인데
스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현해야 하는 기능이 너무 많다
다른 이유로 인터페이스와 메서드를 직접 구현하고 싶다면?
-JPA를 직접사용(EntityManager)
-스프링 JDBC Template 사용
-MyBatis 사용
-데이터 베이스 커넥션 직접 사용 등등
-Query DSL 사용 등
위 기능을 데이터 JPA에서 사용하고 싶을 경우
커스텀한 기능 하나마 쓰고 싶을 경우 사용자 인터페이스 인터페이스를 만든다.
1.MemberRepositoryCustom , Interface 생성 ( 기능 명시)
public interface MemberRepositoryCustom{
List<Member> findMemberCustom();
}
2.구현체 Impl Class 생성
@RequiredArgsConstructor
public class MemberRespositoryImpl implements MemberRepositrotCustom{
private final EntityManager em;
}
@Override
public List<Member> findMemberCustom(){//jpql 을 사용
return em.createQuery("select m from Member m")
.getResultList();
}
3.기존 Repository 에 연결
public interface MemberRepository extends JPARepository<Member , Long> , MemberRepositoryCustom
MemberRepositoryCustom (인터페이스)를 상속받고
그 구현체를 호출하면
MemberRepository.findMemberCustom()
그 인터페이스는 기능이 구현된 class Impl에 로직으로 spring이 연결해 준다.
간단한 기능은 데이터 JPA를 사용하고 복잡한건 커스텀을 이용해서 사용
그런데 Imple class에 규칙이 하나 있는데
연결할 Repository (MemberRepository)와 이름을 맞춰 주어야 한다.
MemberRepositroy + Impl
이걸 맞춰주어야 spring이 메서드를 찾아준다.
사용자 저으이 레포지토리가 항상 필요한건 아니다.
무분별한 사용은 좋지 않다.
핵심 비즈니스 로직과 화면용 DTO로직을 분리해주는게 좋다.
Repository를 분리
'Spring Data JPA' 카테고리의 다른 글
| 3월 23일 SpringDataJPA 도메인 클래스 컨버터 (0) | 2023.03.23 |
|---|---|
| 3월 23일 SpringDataJPA Auditing (0) | 2023.03.23 |
| 3월 22일 SpringDataJPA hint & lock (0) | 2023.03.22 |
| 3월 22일 SpringDataJPA EntityGraph (fetch Join) (0) | 2023.03.22 |
| 3월 22일 SpringDataJPA 벌크성 수정 쿼리 (1) | 2023.03.22 |