생성자 + @QueryProjection
@Data
public class MemberDto {
private String username;
private int age;
public MemberDto() {
}
@QueryProjection
public MemberDto(String username, int age) {
this.username = username;
this.age = age;
}
}
./gradlew compileQuerydsl
QMemberDto 생성 확인
@QueryProjection 활용
@Test
public void findDtoByQueryProjection() {
List<MemberDto> result = queryFactory
.select(new QMemberDto(member.username, member.age))
.from(member)
.fetch();
for (MemberDto memberDto : result) {
System.out.println("memberDto = " + memberDto);
}
}
이 방법은 컴파일러로 타입을 체크할 수 있으므로 가장 안전한 방법이다. 다만 DTO에 QueryDSL 어노테이션을 유지해야 하는 점과 DTO까지 Q 파일을 생성해야 하는 단점이 있다.
distinct
List<String> result = queryFactory
.select(member.username).distinct()
.from(member)
.fetch();
참고: distinct는 JPQL의 distinct와 같다.
출처 : 김영한 JPA 스프링 데이터 강의
'Querydsl' 카테고리의 다른 글
동적 쿼리 - Where 다중 파라미터 사용 (0) | 2022.07.25 |
---|---|
동적 쿼리 - BooleanBuilder 사용 (0) | 2022.07.25 |
프로젝션과 결과 반환 - DTO 조회 (0) | 2022.07.25 |
프로젝션과 결과 반환 - 기본 (0) | 2022.07.25 |
상수, 문자 더하기 (0) | 2022.07.25 |