QueryDsl 중급 문법


프로젝션(Projection) : select 대상 지정 

프로젝션 대상이 하나면 하나의 타입을 명확하게 지정 가능
프로젝션 대상이  이상이면 튜플이나 DTO로 조회

Tuple -> 서비스, 컨트롤러까지 넘어가면 좋지 않은 설계다.
DTO로 변환해서 사용하자.


프로젝션과 결과 반환 : DTO 조회
결과를 DTO 반환할때 사용
 3가지의 방법을 지원한다.

1. setter 접근(프로퍼티 접근) 방식 (주의 : 기본생성자가 있어야한다. -> @NoArgsConstructor)
... Projections.bean(MemberDto.class, member.username, member.age)

2. 필드 직접 접근
... Projections.fields(MemberDto.class, member.username, member.age)

3. 생성자 사용
... Projections.constructor(MemberDto.class, member.username, member.age)


프로젝션과 결과 반환 : @QueryProjection 활용
@QueryProjection -> 컴파일 시점에서 에러를 발견할  있다.

단점 
Q파일을 생성해야한다.
DTO 자체가 QueryDsl 어노테이션에 의존하게 된다. -> 하지만 실용적이다.