dto

@Data
@NoArgsConstructor
public class MemberDto {

	private String username;
	private int age;

	public MemberDto(String username, int age) {
		this.username = username;
		this.age = age;
	}
}

JPQL 예제

@Test
public void findDtoByJPQL() {
	List<MemberDto> result = em.createQuery("select new study.querydsl.dto.MemberDto(m.username, m.age) from Member m", MemberDto.class)
			.getResultList();

	for (MemberDto dto : result) {
		System.out.println(dto);
	}
}

Querydsl 버전

위 방법들을 지원한다.

프로퍼티 접근 (setter 활용)

@Test
public void findDtoBySetter() {
	List<MemberDto> result = queryFactory
			.select(Projections.bean(MemberDto.class,
					member.username,
					member.age))
			.from(member)
			.fetch();

	for (MemberDto dto : result) {
		System.out.println(dto);
	}
}

필드 직접 접근

@Test
public void findDtoByField() {
	List<MemberDto> result = queryFactory
			.select(Projections.fields(MemberDto.class,
					member.username,
					member.age))
			.from(member)
			.fetch();

	for (MemberDto dto : result) {
		System.out.println(dto);
	}
}