• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

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

22.10.30 11:21 작성 조회수 781

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을 만드는 작업을 여러번 반복을 해야하는 상황이 발생하다보니 소스가 많이 지저분해지는 느낌이 많이 듭니다.

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2022.10.30

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

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

해당 강의의

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

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


감사합니다.

아... 감사합니다.

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

다시한번 감사드립니다.

y2gcoder님의 프로필

y2gcoder

2022.10.30

감사합니다 :)