Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

프로젝션과 결과 반환 : DTO, @QueryProjection 본문

인프런/[인프런] QueryDsl

프로젝션과 결과 반환 : DTO, @QueryProjection

Seung__ 2021. 9. 3. 22:15

1. @QueryProjetion


  • DTO의 생성자에 @QUeryProjection 붙여주고
@Data
public class MemberDto {

    private String username;
    private int age;

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

    public MemberDto() {
    }
}
  • compileQuerydsl을 실행하면

 

  • DTO로 Q파일로 만들어줌 ㄷㄷ

/**
 * study.querydsl.dto.QMemberDto is a Querydsl Projection type for MemberDto
 */
@Generated("com.querydsl.codegen.ProjectionSerializer")
public class QMemberDto extends ConstructorExpression<MemberDto> {

    private static final long serialVersionUID = 1356709634L;

    public QMemberDto(com.querydsl.core.types.Expression<String> username, com.querydsl.core.types.Expression<Integer> age) {
        super(MemberDto.class, new Class<?>[]{String.class, int.class}, username, age);
    }

}
  • select에 new로 QMemberDto를 생성하면됨
    @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 파일을 생성해야 하는 단점이 있다.
    • 기존에 DTO는 Querydsl에 대한 의존성이 없었는데... Querydsl에 대한 의존성을 가지게 된다..ㅜ
    • DTO를 서비스에 쓰고, API에 반환하기도 하는데..Querydsl에 대한 의존성 때문에 DTO가 순수하게 유지되지 않음.

 

 

2. GitHub : 210903 @QueryProjection


 

 

GitHub - bsh6463/Querydsl

Contribute to bsh6463/Querydsl development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] QueryDsl' 카테고리의 다른 글

벌크 연산  (0) 2021.09.04
동적쿼리 : BooleanBuilder, Where 다중 파라미터  (0) 2021.09.03
프로젝션과 결과 반환 - DTO 조회  (0) 2021.09.03
프로젝션과 결과 반환  (0) 2021.09.03
상수, 문자 더하기  (0) 2021.09.03
Comments