controller
@PostMapping("/board/save")
public String save(BoardRequest.SaveDTO saveDTO) {
boardService.게시글쓰기(saveDTO);
return "redirect:/";
}
Request
@Data
public static class SaveDTO{
private String title;
private String content;
public Board toEntity(){
// setter말고 생성자를 만들어라
Board board = new Board(null,title,content,null);
return board;
}
}
외부에서 들어온 dto를 model로 변경해서 db로 보내기 위해 toEntity 메서드를 생성한다.
빈 객체인 Board type의 board를 생성해 값을 넣어주기 위해 아래의 Board class에
@AllArgsConstructor를 생성해준다.
Board(table class)
@AllArgsConstructor
@NoArgsConstructor // db에서 조회해서 가져온 RS를 디폴트 생성자를 호출해서 new하고 값을 채워준다.// defalut 생성자가 있어야 reflection해서 값을 매핑해서 가져올 수 있다.
@Getter
@Table(name="board_tb")
@Entity
public class Board {
@Id //jakarta
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String content;
@CreationTimestamp // native query에서는 적용안됨
private Timestamp createdAt;
}
Service
@Transactional
public void 게시글쓰기(BoardRequest.SaveDTO saveDTO) {
boardRepository.save(saveDTO.toEntity());
}
model로 변환시켜 boardRepository로 넘긴다
Repository
public void save(Board board) { // board 객체를 만들어서 던지면 insert해준다.
em.persist(board);
}
받은 model을 EntityManager의 persist로 insert한다.
이 때, native query와는 다르게 now()를 사용할 수 없으므로 Board class의
private Timestamp createdAt;에 @CreationTimestamp를 붙여준다.
@CreationTimestamp
private Timestamp createdAt;
Share article