-
Spring Data JPA - 사용자 정의 리포지토리 구현Spring/Spring Data JPA 2022. 3. 21. 10:47728x90반응형
사용자 정의 리포지토리 구현
- Spring Data JPA에서 제공하는 JpaRepository 인터페이스는 스프링이 구현체를 자동으로 생성해준다.
- Spring Data JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 메서드들이 너무 많다.
- 사용자 정의 리포지토리 구현 - JpaRepository의 메서드들을 오버라이드 안 해도 된다.
- 인터페이스의 메서드를 직접 구현 - 사용자 정의 리포지토리 사용
- JPA 직접 사용
- 스프링 JDBC Template 사용
- MyBatis 사용
- 데이터베이스 커넥션 직접 사용 등
- Querydsl 사용
사용자 정의 리포지토리 구현
1. 사용자 정의 인터페이스 생성
public interface MemberRepositoryCustom { List<Member> findMemberCustom(); }
2. 사용자 정의 인터페이스의 구현 클래스 생성
- 스프링 데이터 JPA가 자동으로 스프링 빈 등록
※ 주의 - 사용자 정의 인터페이스명 + Impl인 클래스명으로 생성해야 한다.
@RequiredArgsConstructor public class MemberRepositoryImpl implements MemberRepositoryCustom { private final EntityManager em; @Override public List<Member> findMemberCustom() { return em.createQuery("select m from Member m") .getResultList(); } }
3. 사용자 정의 인터페이스 상속
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom { }
참고
핵심 비즈니스 로직에 관련되면 사용자 정의 인터페이스를 만들어서 상속하면 되지만 핵심 비즈니스 로직에 관련이 없고 특정 화면에서 사용되는 경우라면 인터페이스가 아닌 클래스로 만들어서 스프링 빈으로 등록해 사용하는 것이 좋다. 위에서 예시로 든 사용자 정의 인터페이스가 아닌 클래스로 만들면 다음과 같다.
@Repository @RequiredArgsContructor publuc class MemberQueryRepository { private final EntityManager em; List<Member> findAllMembers() { retrun em.createQuery("select m from Member m") .getResultList(); } }
728x90반응형'Spring > Spring Data JPA' 카테고리의 다른 글
Spring Data JPA - 도메인 클래스 컨버터 (0) 2022.03.21 Spring Data JPA - 엔티티의 생성, 변경한 사람과 시간을 추적(Auditing) (0) 2022.03.21 Spring Data JPA - @EntityGraph (0) 2022.03.20 Spring Data JPA - 벌크성 수정 쿼리 (0) 2022.03.20 Spring Data JPA - 페이징과 정렬 (0) 2022.03.20