-
[Spring] QueryDsl projection(2)Framework/Spring 2022. 3. 2. 21:53
2022.03.01 - [Framework/Spring] - [Spring] QueryDsl projection
지난번에 QueryDsl projection을 해보았는 데 이번에는 Q 파일을 생성하여 projection하는 방법에 대해서 알아보도록 한다.
바로 코드로 알아보자.
List<MemberDto> result = queryFactory .select(new QMemberDto(member.username, member.age)) .from(member) .fetch();
projection이기에 select 부분만 보면 된다. QueryDsl의 Q 파일을 사용한다.
@Data @NoArgsConstructor public class MemberDto { private String username; private int age; @QueryProjection public MemberDto(String username, int age) { this.username = username; this.age = age; } }
MemberDto 클래스도 확인해보면 생성자 부분에 QueryProjection이라는 annotation을 붙이면 된다. 그러면 아주 쉽게 사용이 가능하다.
지난번에 작성한 부분에 member.id라는 값을 넣으면 다음과 같이 에러가 나지 않지만(constructor는 런타임 에러가 난다)
이러한 QueryProjection의 장점은 다음과 같이 컴파일 에러를 발생하기 때문에 쉽게 에러를 잡을 수 있다.
또한 위와 같이 parameter info를 통해서 몇가지 파라미터를 받을 수 있는 지 확인도 쉽게 가능하기에 유용하다.
굳이 이 방식의 단점을 찾자면 Q 파일을 생성해주어한다는 것과 dto가 QueryDsl에 의존성을 가진다는 것이다.
물론 의존성을 가진다는 것은 어떻게 보면 POJO의 조건과 떨어진다고 볼 수 있지만 개인적으로 어차피 QueryDsl은 필수적으로 사용하기에, 적극적으로 사용하여 에러를 덜 발생시키는 것이 낫다고 본다.
'Framework > Spring' 카테고리의 다른 글
[Spring] request에서 enum으로 값 전달받기 (0) 2022.03.15 [Spring] Querydsl 동적 쿼리 (0) 2022.03.04 [Spring] QueryDsl projection (0) 2022.03.01 [SpringBoot] Jackson Annotation (0) 2020.08.17 [SpringBoot] 예외처리 (0) 2020.06.22