inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

tuple로 조회된 결과값을 modelMapper에 담을 수 있을까요?

해결된 질문

1123

인프러너

작성한 질문수 58

0

아래와 같이 querydsl을 사용해서 목록을 조회하고 List로 받은 결과값을 BoardDto 타입으로 변환해서 저장하는것은 잘 됩니다.

   List<Board> list = queryFactory.select(board)
                .from(board)
                .fetch();
        List<BoardDto> boardList = new ArrayList<>();
        list.forEach(v -> {
            boardList.add(modelMapper.map(v, BoardDto.class));
        });

그런데 문제는 아래와 같이 Tuple로 리턴을 받았을때는 어떻게 담아야 할까요?

List<Tuple> list = queryFactory.select(board.title, board.content)
                .from(board)
                .fetch();

검색을 했을 때.. 아래와 같이 사용을 하면 된다고 하는데.. getElements()라는 메소드는 존재하지 않는데 어떻게 저렇게 사용을 하는지 모르겠네요..(현재 자바 8을 사용하고 있습니다.)

List<Product> products = productsTuple
            .stream()
            .map(p -> {
                Map<String, Object> maps = new HashMap<>();
                p.getElements().forEach(te -> {
                    maps.put(te.getAlias(), p.get(te.getAlias()));
                });
                return modelMapper.map(maps, Product.class));
            })
            .collect(Collectors.toList());

단순하게 DB에 있는 컬럼만을 사용자로 보내주는 경우는 많지 않고 가공을 해서 보내줘야 하는 경우가 대부분인데..

querydsl로 tuple데이터를 조회했을 때 modelmapper로 담는 방법이 없을까요?

 

tuple로 조회된 정보들은 Map으로 따로 담아서 view 로 리턴을 해 주는데 그렇게 되면 tuple의 결과값에 따라 map에 넣어주는 데이터들도 많아지고, 중복 비슷한 자료들이 너무 많아져서 보기가 좋지 않은데..

 

return 할 DTO를 하나 만들어서 그곳에 리턴될 값들으 모두 담아서 리턴을 할 수 있는 방법이 있을까요??

예를들어 게시판 테이블에서 조회를 할 때 특정 필드값들을 select하고, 첨부파일 정보를 select하고, 회원 정보를 select를 해서

이 3개의 테이블에 있는 필요한 값들을 DTO를 하나 만들어서 그곳에 담아서 리턴을 해 주고 싶은데

제가 알고있는 방식은

Map<String, Object> map = new HashMap<>();
map.put("id", tuple(user.id));
map.put("title",tuple(board.title));
map.put("fileName", tuple.attach.fileName));

위와같은 식으로 맵에 각각 담아서 맵으로 화면에 리턴을 해 주고 있는데

이런 값들을 담을 DTO를 아래와 같이 만들고

public class returnDTO{
    private Long id;
    private String title;
    private String filename;
}

returnDTO 안에 modelmapper나 다른 방법을 사용해서 한꺼번에 담을 수 있는 방법이 있을까요?

값이 얼마 없을때는 그냥 사용을 하면 되는데 값이 많아지고, 하나의 메소드 안에서 여러번 가공을 해서 만들어야 할 경우에는 Map을 만드는 작업을 여러번 반복을 해야하는 상황이 발생하다보니 소스가 많이 지저분해지는 느낌이 많이 듭니다.

java JPA

답변 1

0

y2gcoder

안녕하세요. 아버지님, 공식 서포터즈 y2gcoder입니다.

말씀하신 것을 다 훑어봤을 때, 굳이 튜플로 받기 보다는 바로 DTO로 받을 수 있는 기능이 있어 추천드리고자 합니다.

해당 강의의

중급 문법 > 프로젝션과 결과 반환 - DTO 조회

편을 살펴보시는 게 어떨까요?


감사합니다.

0

인프러너

아... 감사합니다.

해당 강좌에 자세하게 설명을 해 주셨었네요..ㅠㅠ

다시한번 감사드립니다.

0

y2gcoder

감사합니다 :)

join에대해 질문드립니다.

0

22

1

SpringBoot 4.X에서의 Querydsl 설정

0

170

2

querydsl 오픈소스에 대한 질문

1

103

1

예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?

0

128

1

Querydsl 6.X버전에 대해서 어떻게 생각하시나요?

0

357

2

여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요

1

88

1

fetchResults()는 더이상 권장되지 않는다는데 맞나요?

0

173

1

querydsl sum() 메서드 없어요.

0

172

2

build 디렉터리 생성

0

153

2

자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?

0

125

2

현재 Querydsl에서 from절 서브쿼리를 지원하나요?

0

99

1

오타 제보 드립니다.

0

80

2

벌크 연산과 flush, clear

0

85

1

Run As Intellij 로 변경시 Q타입 import 불가

0

98

1

QHello import하기 문제 발생

0

158

2

등록된 함수 보는법(H2Dialect) 질문

0

80

2

5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의

1

209

2

[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??

1

215

1

querydsl 설정 문제

0

230

2

quey dsl 설정부분

0

169

2

count 쿼리 관련 질문입니다!

0

80

1

stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.

0

101

1

답변부탁드리겠습니다.

0

95

2

(OrderSpecifier)관련 내용 어디있을가요

0

68

1