Jpa

QueryDsl 에서 Projection 종류와 방법

chbong 2024. 7. 19. 23:37

QueryDsl에서 Projection의 방법은 크게 4가지로 구분된다.

각각의 사용법에 대해 알아보려고 한다.

1. 프로퍼티 주입

 ● setter를 통해서 주입하기 때문에 setter가 필수로 있어야하며 엔티티의 명과 조회하려는 명칭이 잘 맞아야한다.

 ● 런타임시에 에러를 잡기때문에 테스트는 필수이다.

queryFactory
        .select(Projections.bean(
                MemberDto.class,
                member.username,
                member.age))

Projections.bean 을 사용하며 사용할 클래스를 선언한 뒤 setter가 선언된 프로퍼티명칭과 맞는 조회를 해야한다.

2. 필드 주입

● 필드 명칭에 맞춰서 주입되는 방법이며, setter나 생성자가 없어도 가능하다.

● 단) 필드명칭과 조회 명칭은 잘 맞춰야 한다.

● 필드 주입도 런타임시에 에러를 잡기때문에 테스트를 필수로 해야한다.

queryFactory
        .select(Projections.fields(
                MemberDto.class,
                member.username,
                member.age))

Projections.fields 사용

3. 생성자 주입

● 생성자를 통해 주입받기 때문에 생성자를 선언해주어야 한다.

● 런타임시에 에러를 잡는다.

Projections.constructor

Projections.constructor 사용

4. @QueryProjection 

● QueryDsl을 사용하여 QMemberDto 생성하여 주입한다.

● 컴파일시에 에러를 잡아주기 때문에 querydsl 작성에 효율적이다.

● Dto 클래스단에서 queryDsl을 의존해야 하기때문에 고민의 여지가 있다.

.select(new QMemberDto(member.username,member.age))

결론

각 상황에 맞는 최적의 projection을 사용하면 되겠지만, Dto에서 querydsl을 의존하는게 크게 문제 되지않는다면 QueryProjection을 사용하여 컴파일시에 직관적으로 에러를 잡는게 더 좋다고 생각한다.

 

 

출처 - https://www.inflearn.com/course/querydsl-%EC%8B%A4%EC%A0%84