1. 사용자 정의 Repository
Spring Data Jpa 등에서 제공하지 않는 querydsl을 적용한 sql문 작성을 위해서는 사용자 정의 레포지토리가 필요하다. 강의 자료에 따르면 다음과 같이 구성하면 된다.
이 방식은 기존에 작성해둔 MemberRepository interface 를 계속 사용하겠다는 의미가 된다. 코드로 보면 아래와 같다.
<<interface>> MemberRepositoryCustom
1
2
3
|
public interface MemberRepositoryCustom {
List<MemberTeamDto> search(MemberSearchCondition condition);
}
|
cs |
Custom 인터페이스를 상속받는 구현체인 MemberRepositoryImpl.class
주의할 점은 MemberRepository에서 사용할 것이기 때문에 구현체의 이름이 반드시 MemberRepositoryImpl 이여야 된다는 것이다. [Repository 이름 + Impl] 이라는 규칙이 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class MemberRepositoryImpl implements MemberRepositoryCustom {
private final JPAQueryFactory queryFactory;
public MemberRepositoryImpl(EntityManager em) {
this.queryFactory = new JPAQueryFactory(em);
}
@Override
public List<MemberTeamDto> search(MemberSearchCondition condition) {
return queryFactory
...
}
|
cs |
<<interface>> MemberRepository
그리고 원래 MemberRepository에서는 Custom 인터페이스를 추가로 상속받으면 된다.
1
2
3
4
5
|
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
List<Member> findByUsername(String username);
}
|
cs |
반드시 사용자 정의 레포지토리를 사용할 필요는 없다.
이런 공통화된 interface에 기능을 넣는 방식은 나중에라도 특정 엔티티(위 예제에서는 Member 엔티티)등을 조회하여 여러 api 에서 사용할 때만 사용하면된다. 보통 실무에서 겪는 일반적인 특정 api에 종속된 Repository의 경우에는 그냥 @Repository 클래스를 만들고 거기에서 JPAQueryFactory, EntityManager를 주입받아서 사용하면 된다.
참조
1. 인프런_실전! Querydsl_김영한 님 강의
https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84/dashboard
'Programming-[Backend] > JPA' 카테고리의 다른 글
[링크] JPA Map 결과 리턴(결과 집합 그루핑) (0) | 2022.02.21 |
---|---|
[TIL][에러] SQL-Server - hibernate; JPA 적용 Sort, Paging 시 데이터 누락, 중복 문제 (0) | 2021.12.18 |
[Querydsl] 5. 중급 문법 - 벌크연산, SQL function, 동적 검색 적용 API 개발해보기 (0) | 2021.12.08 |
[Querydsl] 4. 중급 문법 - Projections, BooleanBuilder (0) | 2021.12.06 |
[Querydsl]3. 기본 문법 - 서브쿼리, Case, 상수 문자 더하기 (0) | 2021.12.05 |