오봉이와 함께하는 개발 블로그
Querydsl - 프로젝션 결과 반환 (기본) 본문
728x90
프로젝션과 결과 반환 - 기본
프로젝션이란 select
절에 어떤 것을 가져올지에 대한 대상을 지정하는 것이다.
프로젝션 대상이 하나
@Test
void simpleProjection() {
List<String> result = queryFactory
.select(member.username)
.from(member)
.fetch();
for (String s : result) {
System.out.println("s = " + s);
}
}
- 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다.
- 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회
튜플 조회
Querydsl이 여러 개 조회할 때를 대비해서 만들어놓은 임의의 타입으로 프로젝션 대상이 둘 이상일 때 사용한다.
com.querydsl.core.Tuple
@Test
void tupleProjection() {
List<Tuple> result = queryFactory
.select(member.username, member.age)
.from(member)
.fetch();
for (Tuple tuple : result) {
String username = tuple.get(member.username);
Integer age = tuple.get(member.age);
System.out.println("username = " + username);
System.out.println("age = " + age);
}
}
member.username
과 member.age
문자열과 정수 타입의 형태를 반환하기 때문에 튜플을 통해 조회한다.
tuple.get(필드명)
을 통해서 원하는 값을 찾아올 수 있다.
튜플을 리포지토리 계층에서는 사용해도 좋지만, 서비스나 컨트롤러 계층으로 넘어가서 사용하면 좋지 않을 수 있다.
DB 접근 기술을 바꾸더라도 리포지토리 계층에서만 코드를 변경해야 좋은 설계인데, 서비스 계층이나 컨트롤러 계층까지 튜플을 사용하면 DB 접근 기술을 바꿀 때 서비스, 컨트롤러 계층의 코드를 모두 수정해야 하는 불상사가 생길 수 있기 때문이다.
인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90
'BE > JPA' 카테고리의 다른 글
Querydsl - 프로젝션 결과 반환 (@QueryProjection) (0) | 2022.09.18 |
---|---|
Querydsl - 프로젝션 결과 반환 (DTO 조회) (0) | 2022.09.18 |
Querydsl - 상수, 문자 더하기 (0) | 2022.09.18 |
Querydsl - Case 문 (0) | 2022.09.18 |
Querydls - 서브 쿼리 (0) | 2022.09.18 |
Comments