728x90
프로젝션 대상이 하나

- 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있음
- 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회
튜플 조회

- 프로젝션 대상이 둘 이상일 때 사용
DTO 조회





- JPQL에서의 DTO 조회
- 순수 JPA에서 DTO를 조회할 때는 new 명령어를 사용해야 함
- DTO의 package이름을 다 적어줘야 해서 지저분함
- 생성자 방식만 지원함
- QueryDsl bean 생성( BeanPopulation)
- Getter, Setter를 사용하여 값을 넣어준다.
- 필드 직접 접근
- 필드에 바로 접근하여 넣어준다(Getter,Setter 필요 X)
- 생성자 사용
- 생성자를 통해 주입해 준다(타입이 딱 맞아야된다)
별칭이 다를때
서브 쿼리를 사용하여 별칭이 다르거나, Dto의 이름과 뽑아오는 값이 다를 경우


- name 속성이 이름이 다르다.
- as, ExpressionUtils 사용
- subQuery 같은 경우는 ExpressionUtils를 사용하고, 일반적인 속성들은 as를 사용한다
@QueryProjection 활용


- Q파일을 생성할 수가 있다
- 단점
- 1. 해당 DTO가 QueryDsl에 의존적 이게 된다(QueryDsl을 제거 시 에러)
- 2. Q파일을 생성해야된다.
- 단, Q파일을 생성함으로써 런타임에 에러를 잡을 수 있으며, 생성자에 어떤 값이 들어가는지 확인이 가능하다.
추가(Distinct)
List result = queryFactory
.select(member.username).distinct()
.from(member)
.fetch();
참고: distinct는 JPQL의 distinct와 같다
728x90
'실전! Querydsl' 카테고리의 다른 글
| Ch03. 중급 문법 - 수정, 삭제 벌크 연산 (0) | 2021.12.31 |
|---|---|
| Ch03. 중급 문법 - 동적 쿼리(BooleanBuilder 사용) (0) | 2021.12.31 |
| Ch02. 기본 문법 - Case문, 상수, 문자 더하기 (0) | 2021.12.30 |
| Ch02. 기본 문법 - 서브 쿼리 (0) | 2021.12.30 |
| Ch02. 기본 문법 - 조인(기본 조인, On, 페치 조인) (0) | 2021.12.30 |