메모장

QueryDSL 에서 DTO데이터만 뽑아오기

키스샷1104 2023. 11. 23. 04:51

 

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

@Test//필드에 그대로 주입(이것도 기본 생성자가 projected가 아니며 안됨)
public void findDtoByFields() {
    List<MemberDto> result = queryFactory
            .select(Projections.fields(MemberDto.class,
                    member.username,
                    member.age
            ))
            .from(member)
            .fetch();

    for (MemberDto memberDto : result) {
        System.out.println("memberDto = " + memberDto);
    }
}

@Test//생성자 projected면 안됨
public void findDtoByContructor() {
    List<MemberDto> result = queryFactory
            .select(Projections.constructor(MemberDto.class,
                    member.username,
                    member.age
            ))
            .from(member)
            .fetch();
}