QueryDSL은 자바 기반의 영속성 프레임워크에서 강력하고 효과적인 쿼리 작성을 도와주는 라이브러리입니다.
이 라이브러리를 사용할 때, @QueryProjection 어노테이션은 DTO(Data Transfer Object)를 생성할 때 중요한 역할을 합니다.
QueryDSL과 DTO
QueryDSL을 사용하면 JPA 엔터티의 필드를 직접 사용하여 동적 쿼리를 작성할 수 있습니다.
하지만 종종 특정 쿼리의 결과를 매핑하기 위해 엔터티 필드보다는 DTO를 사용하게 됩니다.
이때 @QueryProjection 어노테이션은 DTO의 생성자를 표시하고, QueryDSL이 해당 생성자를 활용하여 DTO를 생성할 수 있도록 도와줍니다.
@QueryProjection 어노테이션의 의미
@QueryProjection 어노테이션은 해당 생성자가 QueryDSL에서 사용되어야 함을 나타냅니다.
QueryDSL은 이 어노테이션을 통해 DTO 클래스 내의 특별한 생성자를 찾아내고, 그 생성자를 이용하여 DTO 객체를 생성합니다.
예시 코드
import com.querydsl.core.annotations.QueryProjection;
public class MagicEntityDTO {
private String name;
private int age;
// 기본 생성자, 게터, 세터 등 생략
@QueryProjection
public MagicEntityDTO(String name, int age) {
this.name = name;
this.age = age;
}
}
설명
위의 코드에서 @QueryProjection 어노테이션은 MagicEntityDTO 클래스의 특별한 생성자에 사용됩니다.
이 생성자는 QueryDSL이 사용자 정의한 엔터티(MagicEntity)의 필드를 매핑하여 DTO 객체를 생성할 때 활용됩니다.
QueryDSL을 통한 DTO 생성
public List<MagicEntityDTO> findEntitiesWithQueryDSL() {
QMagicEntity magicEntity = QMagicEntity.magicEntity;
return new JPAQueryFactory(entityManager)
.select(Projections.constructor(MagicEntityDTO.class, magicEntity.name, magicEntity.age))
.from(magicEntity)
.fetch();
}
설명
Projections.constructor 메서드는 @QueryProjection 어노테이션이 있는 생성자를 활용하여 DTO 객체를 생성하도록 QueryDSL에 지시합니다.
이를 통해 쿼리 결과를 MagicEntityDTO로 변환하여 반환할 수 있습니다.
마무리
@QueryProjection 어노테이션은 QueryDSL을 사용하여 DTO를 생성할 때 중요한 역할을 하는데,
특히 동적 쿼리에서 엔터티 필드 대신 DTO를 사용하고자 할 때 유용하게 활용됩니다.
이 어노테이션을 통해 QueryDSL은 사용자가 정의한 DTO를 간편하게 생성하고,
쿼리 결과를 목적에 맞게 매핑할 수 있습니다.
오늘의 티스토리는 여기까지고요.
항상 믿고 봐주셔서 감사합니다.
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
Spring boot 에서 @bean 과 @component 어노테이션의 차이 (0) | 2023.12.04 |
---|---|
인텔리제이(intellij) 에서 실행가능한 Jar 생성하는 방법 깔끔정리 (0) | 2023.05.18 |
마이크로서비스에서 구성관리(configuration management) 깔끔정리 (ft. Git을 활용한 간단한 스프링 클라우드 컨피그 서버 구축) (0) | 2023.04.07 |
AOP(Aspect-Oriented Programming) 깔끔하게 정리하기 (0) | 2023.03.28 |
Lombok 관련 @Builder 와 @Accessors 의미 깔끔하게 정리하기 (0) | 2022.06.14 |