[스프링부트 blogV2] 1.글쓰기 JPA로 수정하기

silver's avatar
Jan 11, 2025
[스프링부트 blogV2] 1.글쓰기 JPA로 수정하기

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

silver