스프링 부트 프로젝트(1) Entity To DTO / DTO To Entity

넙데데맨·2022년 9월 2일
0
post-custom-banner

Entity To DTO

친구들과 함께하는 부트 프로젝트 중 List<Entity>를 받아와 List<DTO>로 반환해야 했다.

어떻게 해야할까

Entity에서 DTO는 생성자를 사용해 초기화 시켜주었는데 List 타입이라 불가능했다.

방법

  1. Dto 클래스에 Entity를 DTO로 변환 시키는 생성자 만들기
  2. List<Entity> 객체를 스트림으로 변환
  3. Entity 클래스의 변환 메소드를 거쳐 DTO가 담긴 스트림 반환
  4. 스트림을 다시 List<DTO>로 반환
 @Override
    public List<BoardDto> selectBoardList(int pageNum) {
        Page<Board> boardList = boardRepository.findByisDeleteOrderByNoDesc(false,PageRequest.of(pageNum,2));

        return boardList.stream().map(BoardDto::new).collect(Collectors.toList());
    }

stream()

컬렉션 객체에서 stream()을 사용하면 stream 객체로 만들 수 있다.

Stream.map()

인자로 함수를 받으며 Stream의 요소를 다른 형태로 변경한다.
내 코드에서는 map()에 Board를 인자로 가지는 BoardDto 생성자를 넣어서 BoardDto로 형변환했다.

Stream.collect()

Stream을 다시 컬렉션의 형태로 바꿀 수 있게 하는 메소드로 Set 혹은 List형태로 다시 변형시킨다.

Collectors.toList()
Collectors.toSet()

더 정밀하게 바꾸고 싶다면 toCollection을 사용한다.

toCollection()

boardList.stream().collect(Collectors.toCollection(LinkedList::new));

DTO to Entity

빌더 패턴을 사용한 toEntity() 메소드를 만들어서 처리

    public Board toEntity(){
        return Board.builder()
                .no(no)
                .writer(writer)
                .title(title)
                .content(content)
                .writeDate(writeDate)
                .isDelete(isDelete)
                .view(view)
                .recommend(recommend)
                .imgRoute(imgRoute)
                .build();
    }
profile
차근차근
post-custom-banner

0개의 댓글