프로젝션이란
select에 무얼 가지고 올지 대상을 지정하는 것.
보통 이제 세가지 경우로 나뉘는데,
단일 프로젝션
복수의 프로젝션
Dto 조회 (이것도 사실 상 DB상에서 복수의 프로젝션 범주) 이정도
단일 조회는 엔티티 자체를 조회해오거나, 아니면 m.username해서 하나만 조회해 올 때.
@Test
public void simpleProjection(){
List<String> result = query.select(m.username).from(m).fetch();
for (String s : result) {
System.out.println("s = " + s);
}
}
그냥 조회해 오는거다.
select 절 안에 조회해올것의 표현식을 쓰고, 가져오면 된다.
Q클래스는 엔티티의 정보를 담은 표현식들의 모음이라고 생각하면 된다.
/* select
member1.username
from
Member member1 */ select
m1_0.username
from
member m1_0
s = member1
s = member2
s = member3
s = member4
다음은 튜플
@Test
public void tupleProjection(){
List<Tuple> result = query.select(m.username, m.age).from(m)
.fetch();
for (Tuple tuple : result) {
System.out.println("tuple = " + tuple);
}
}
저렇게 여러 개의 열을 프로젝션 하면 튜플이라는 자료구조에 담아서 준다.
근데 저 Tuple은, QueryDSL이 제공해주는 튜플이다.
즉, QueryDSL에 종속적인 튜플이다.
특정 기술에 종속적인 자료형, 객체를 서비스나 컨트롤러로 넘기는 것은 거부하고 싶다.
튜플로 가져왔어도, 애플리케이션에서 Dto로 변환하여 넘겨주자.
/* select
member1.username,
member1.age
from
Member member1 */ select
m1_0.username,
m1_0.age
from
member m1_0
tuple = [member1, 10]
tuple = [member2, 20]
tuple = [member3, 30]
tuple = [member4, 40]
Dto조회는 다음장에서 할 것이다.
'스프링데이터 + JPA > QueryDSL' 카테고리의 다른 글
22. @QueryProjection (0) | 2023.12.01 |
---|---|
21. 프로젝션 Dto (0) | 2023.12.01 |
19. 상수, 문자 더하기 (0) | 2023.11.30 |
18. CASE 문 (0) | 2023.11.30 |
17. 서브 쿼리 (0) | 2023.11.30 |