inblog logo
|
silver
    스프링부트

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

    silver's avatar
    silver
    Jan 11, 2025
    [스프링부트 blogV2] 1.글쓰기 JPA로 수정하기
    Contents
    controllerRequestBoard(table class)ServiceRepository

    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
    Contents
    controllerRequestBoard(table class)ServiceRepository

    silver

    RSS·Powered by Inblog