
Querydsl Bean 생성(Bean population)
- 프로퍼티 접근
- 필드 직접 접근
- 생성자 사용
MemberDto
public class MemberDto {
private String username;
private int age;
public MemberDto() {
}
public MemberDto(String username, int age) {
this.username = username;
this.age = age;
}
}
프로퍼티 접근 - Setter
List<MemberDto> result = queryFactory
.select(Projections.bean(MemberDto.class,
member.username,
member.age))
.from(member)
.fetch();
- 프로퍼티로 접근할때는 Projections.bean(해당Dto.class, 적용할필드)
필드 직접 접근
List<MemberDto> result = queryFactory
.select(Projections.fields(MemberDto.class,
member.username,
member.age))
.from(member)
.fetch();
- 필드값을 직접 바꾸는 필드 직접 접근은 Projcetions.fields(해당Dto.class, 적용할 필드)
생성자 사용
List<MemberDto> result = queryFactory
.select(Projections.constructor(MemberDto.class,
member.username,
member.age))
.from(member)
.fetch();
- 생성자를 사용할려면 Projcetion.constructor(해당Dto.class, 해당필드)
@QueryProjection
DTO의 생성자에 이 어노테이션을 붙여주면 빌드시 DTO가 Q파일로 생성됨 사용할 때는 new QDto()이런식으로 생성자를 생성하듯 사용하면됨. 이 방법은 컴파일러로 타입을 체크할 수 있으므로 가장 안전한 방법. 다만 DTO에 QuertDSL어노테이션을 유지해야 하는 점과 DTO까지 Q파일을 생성해야 하는 단점이 있음.
@QueryProjection을 사용한 MemberDto
@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;
}
}
- 이렇게 생성자에 @QueryProjection어노테이션을 붙여줌.
- 그후 ./gradlew compileQuerydsl으로 빌드
- QMemberDto 생성 확인
@QueryProjcetion 활용
List<MemberDto> result = queryFactory
.select(new QMemberDto(member.username, member.age))
.from(member)
.fetch();
- 만들어진 QMemberDto의 생성자를 직접 만들어주는 방식
'Java' 카테고리의 다른 글
EC2 포트 포워딩 (0) | 2022.12.16 |
---|---|
[Spring Boot] Querydsl 동적 쿼리 해결하는 방법 (0) | 2022.11.30 |
[Spring Boot] Querydsl Join (0) | 2022.11.30 |
[Spring Boot] Querydsl 검색조건 쿼리 (0) | 2022.11.30 |
[Spring Boot] Querydsl VS JPQL (0) | 2022.11.16 |