seong

JPA CRUD DTO로 변환 하기 - 예제1. findById 본문

JPA

JPA CRUD DTO로 변환 하기 - 예제1. findById

hyeonseong 2022. 10. 25. 17:15

1. findById를 할때 응답 코드에 title,content,userId, username을 보여준다.

2. 먼저 Controller 부분에 ResponseDto를 리턴하도록 수정 

3. BoardRespDto로가서 findById에 필요한 Dto 추가 작성

4. Service부분 로직 수정

실습 진행

1. Controller 부분 ResponseDto 코드 작성 

 // ResponseDto 내부 모습
@AllArgsConstructor
@Getter
@Setter
public class ResponseDto<R> {
  private Integer code;
  private String msg;
  private R data;

}

Controller 

  @GetMapping("/board/{id}")
  public ResponseDto<?> findById(@PathVariable Long id) {
    RoardOneRespDto boardOneRespDto = boardService.findById(id);
    return new ResponseDto<>(1, "성공", boardOneRespDto);
  }

2. BoardRespDto 작성

BoardRespDto에는 Board의 Response에 대한 여러가지 Dto가 담긴다.

그 중 이번엔 findById에 대한 Dto를 작성 

public class BoardRespDto {

  @Getter
  @Setter
  public static class RoardOneRespDto {
    private String title;
    private String content;
    private BoardOneUserDto user; // User는 오브젝트

    @Getter
    @Setter
    public static class BoardOneUserDto { // User를 Dto로 변환
      private Long id;
      private String username;

      public BoardOneUserDto(User user) {
        this.id = user.getId();
        this.username = user.getUsername();
      }
    }

    public RoardOneRespDto(Board board) { // 응답에 대한 부분은 생성자를 이용.
      this.title = board.getTitle();
      this.content = board.getContent();
      this.user = new BoardOneUserDto(board.getUser());
    }

  }
}

3. Service 작성

  @Transactional
  public RoardOneRespDto findById(Long id) {
    Board boardPS = boardRepository.findById(id);
    log.debug("디버그 제목: " + boardPS.getTitle()); // 디버그를 통해 데이터 가져왔는지 테스트
    log.debug("디버그 유저네임: " + boardPS.getUser().getUsername());
    RoardOneRespDto boardOneRespDto = new RoardOneRespDto(boardPS);
    return boardOneRespDto;
  }

결과 확인