IntelliJ ultimate
, SpringBoot
, Java 1.8
, Gradle
, jar
, JPA
, H2
들어가기에 앞서
이번 포스팅은 미리 프로젝트를 생성하고, 다음 의존성을 추가한 상태에서 시작합니다.
@NoArgsConstructor
@Getter
@Entity
public class Board extends Timestamped {
@JsonIgnore
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(length = 50, nullable = false)
private String title;
@Column(length = 200, nullable = false)
private String content;
@Column(length = 100, nullable = false)
private String username;
@JsonIgnore
@Column(nullable = false)
private String password;
public Board(BoardRequestDto requestDto) {
this.title = requestDto.getTitle();
this.username = requestDto.getUsername();
this.content = requestDto.getContent();
this.password = requestDto.getPassword();
}
public void update(BoardRequestDto requestDto) {
this.title = requestDto.getTitle();
this.username = requestDto.getUsername();
this.content = requestDto.getContent();
this.password = requestDto.getPassword();
}
}
저장된 Board들을 찾을 수 있는 공간 역할 !
public interface BoardRepository extends JpaRepository<Board, Long> {
List<Board> findAllByOrderByCreatedAtDesc();
}
Board에 추가할 데이터를 입력할 때, 담을 그릇 역할 !
@Getter
public class BoardRequestDto {
private String password;
private String title;
private String username;
private String content;
private LocalDateTime createdAt;
}
Board에서 값을 가져올 때, 담을 그릇 역할 !
password같은 정보는 노출시키지 않기위해 필드로 넣지 않았다.
@Getter
@NoArgsConstructor
public class BoardResponseDto {
private String title;
private String username;
private String content;
private LocalDateTime createdAt;
private LocalDateTime modifiedAt;
public BoardResponseDto(Board board){
this.title = board.getTitle();
this.content = board.getContent();
this.username = board.getUsername();
this.createdAt = board.getCreatedAt();
this.modifiedAt = board.getModifiedAt();
}
}
@PostMapping
생성할 데이터에 대한 정보를 requestDto에 담아 파라미터로 전달
파라미터값을 Service의 save메소드로 싣어 보냄
결과값을 responseDto에 담아 클라이언트 쪽에 반환
@RequiredArgsConstructor
@RestController
public class BoardController {
private final BoardService boardService;
@PostMapping("/api/board")
public BoardResponseDto createlist(@RequestBody BoardRequestDto requestDto){
return boardService.save(requestDto);
}
Board 객체 생성.
save를 사용하여 BoardRepository에 객체를 저장
@RequiredArgsConstructor
@Service
public class BoardService {
private final BoardRepository boardRepository;
public BoardResponseDto save(BoardRequestDto requestDto){
Board board= new Board(requestDto);
boardRepository.save(board);
return new BoardResponseDto(board);
}
하나의 데이터만 조회하는 방법
@GetMapping
조회할 데이터가 가지고 있는 id값을 받아 @pathVariable사용하여 전달
id 값을 Service의 getDetail메소드로 싣어 보냄
결과값을 responseDto에 담아 클라이언트 쪽에 반환
@GetMapping("/api/board/{id}")
public BoardResponseDto getDetail(@PathVariable Long id){
return boardService.getDetail(id);
}
}
BoardRepository에서 해당 id값과 일치하는 데이터를 찾아 board에 저장.
못찾을 경우:
에러
찾는 경우:BoardResponseDto
에board
를 담아 리턴
public BoardResponseDto getDetail(Long id){
Board board = boardRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("아이디값이 없습니다")
);
return new BoardResponseDto(board);
}