seong
JPA CRUD DTO로 변환 하기 - 예제1. findById 본문
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;
}
결과 확인
'JPA' 카테고리의 다른 글
Dto로 만드는 이유, UserJoin 실습 (0) | 2022.10.26 |
---|---|
Persistence Context 전략을 활용해 ID값 받기, Http상태코드 리턴 (0) | 2022.10.25 |
Spring의 OSIV 정책 (0) | 2022.10.24 |
JPA의 Repository (0) | 2022.10.24 |
JPA 마리아 DB에서 오토 시퀀스 작성 - GenerationType.IDENTITY (0) | 2022.10.21 |