JVM/JPA

[QueryDSL] return 으로 Map(집합) 받기

Hyo Kim 2022. 1. 25. 23:18
728x90
반응형

😀서론

테이블 목록을 가져와 목록에서 ID를 통해 내부 정보를 여러 번 조회할 일이 있었다.

쿼리에서 List<Table> 로 조회해서 for문으로 돌리기에는

중복된 ID를 여러 번 조회할 수도 있고, 결국 ID를 통해 다른 값들을 얻고 싶은 게 목표 이기에

QueryDSL에서 return으로 Map도 받을 수 있는지 찾게 되었고, 찾아서 정리를 해본다.


🙄준비

entity
setUp

위 데이터를 기준으로 결과 값 확인을 진행합니다.


🙂본론

Querydsl에서는 결과 집합(aggregation) 이라는 걸 제공해주는 걸 알았습니다.

결과 처리 방법

쿼리에서 데이터 조회 후 메모리에서 결과에 대한 집합 연산을 수행하는 집합 함수를 의미 합니다.

 

간단한 예시로 살펴보겠습니다.

 

1️⃣Map Value 하나 받기

querydsl

 

test code
sql
결과

select는 transform에 있는 필요한 데이터인 id와 quantity 두 개를 조회하는 걸 확인할 수 있었습니다.

 

2️⃣Map Value 두 개 이상 받기

querydsl
test code
sql
결과

이번에는 as에 color가 추가 되어서 select 문에도 color가 추가 되었습니다.

 

com.querydsl.core.group.Group;

as에 두 개 이상이 되면 value에 Group을 사용할 수 있습니다.

 

😅결론

저는 id를 통해서 name, color 정보를 Map으로 묶기 위해서 Map<String, Group>으로 리턴을 받게 되었고, 

해당 Group에 있는 toArray() 메소드를 통해 array를 만든 후 거기서 데이터를 꺼내는 방식으로 해결하였습니다.

 

 

찾아보니 이러한 방식을 통해서 @OneToMany 와 같은 연관관계에서도 사용하는 걸 알게 되었습니다.

궁금하시면 아래 글을 읽어보셔도 좋을 것 같습니다.

OneToMany 관계에서 Left Outer Join이 필요할 경우

 

결과 집합 방식은 더 다양한 결과 값을 얻을 수 있습니다.

더 많은 예제를 확인하고 싶은 분들은 아래 링크를 참고하시면 좋을 것 같습니다.

tabnine
 

com.querydsl.core.group.GroupBy.map java code examples | Tabnine

GroupExpression<V, U> value) { return map(new GOne<K>(key), value);

www.tabnine.com

 

querydsl Github
 

GitHub - querydsl/querydsl: Unified Queries for Java

Unified Queries for Java. Contribute to querydsl/querydsl development by creating an account on GitHub.

github.com

 

잘못된 내용이나 추가 내용은 댓글로 남겨주시면 감사하겠습니다 (__)

728x90
반응형