해결된 질문
작성
·
1K
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을 만드는 작업을 여러번 반복을 해야하는 상황이 발생하다보니 소스가 많이 지저분해지는 느낌이 많이 듭니다.
아... 감사합니다.
해당 강좌에 자세하게 설명을 해 주셨었네요..ㅠㅠ
다시한번 감사드립니다.