최대 1 분 소요

인프런 실전! Querydsl 강의 내용 정리

생성자 + @QueryProjection

먼저 DTO 생성자에 @QueryProjection를 붙혀준다.

그 다음 gradle compile 해주면

다음과 같이 QDTO(?) 가 생긴다.

1
2
3
4
5
6
7
8
9
10
11
12
@Test  
public void findDtoByQueryProjection() throws Exception {  
    List<MemberDto> result = queryFactory  
            .select(new QMemberDto(member.username, member.age))  
            .from(member)  
            .fetch();  
  
    for (MemberDto memberDto : result) {  
        System.out.println("memberDto = " + memberDto);  
    }  
  
}

그럼 다음과 같이 테스트 코드를 작성할 수 있다.

결과도 잘 나온다.

이 코드의 장점은 런타임 시점이 아니라 컴파일 시점에서

생성자에 없는 컬럼이 추가된다 거나 하는 오류를 잡아 낼 수 있다는 점이다.

그냥 생성자를 사용한 테스트 코드인데 지금 DTO에는 team이 없다.

그래서 이건 지금 시점에선 에러가 안 나는데 실행 시키면 에러가 난다.

다음과 같이 말이다.

하지만 @QueryProjection은 아니다.

다음과 같이 컴파일 시점에서 오류가 이미 발견 된다.

이걸 보면 단점이 없어 보인다.

하지만 딱 한 가지 고려할 점이 있다.

@QueryProjection 이거 하나 때문에 DTO에서 QueryDSL에 대한 의존 관계가 생겨버린다.
그리고 이에 따라 DTO까지 Q파일을 생성해야 하는 단점.

태그: ,

카테고리:

업데이트:

댓글남기기