inblog logo
|
silver
    스프링부트

    [스프링부트 blogV1] 15. 글쓰기

    silver's avatar
    silver
    Dec 30, 2024
    [스프링부트 blogV1] 15. 글쓰기
    Contents
    1. Repository2. BoardController3. Service
     

    1. Repository

    public void save(String title, String content) { Query q = em.createNativeQuery("insert into board_tb(title, content, created_at) values(?, ?, now())"); q.setParameter(1, title); q.setParameter(2, content); q.executeUpdate(); // insert하고 commit해라 }
    주의 : createdAt이 아니라 created_at이다!!
     

    RepositoryTest

    @Test public void save_test(){ //given String title = "제목6"; String content = "내용6"; //when boardRepository.save(title, content); //eye Board board = boardRepository.findById(6); System.out.println(board.getId()); System.out.println(board.getTitle()); System.out.println(board.getContent()); } // rollback(@Transactional) -> @DataJpaTest의 meta@에 @Transactional이 존재
    notion image
     

    2. BoardController

    @PostMapping("/board/save") public String save(BoardRequest.SaveDTO saveDTO) { // x-www 는 클래스로 받을 수 있다 -> BoardRequest.SaveDTO에 바로 바인딩 //원래는 request.getparameter로 받아야한다. //@Data는 내부에 toString을 재정의해서 구현해준다. -> saveDTO만 적어도 saveDTO.toString한 결과가 나온다. System.out.println(saveDTO); boardService.게시글쓰기(saveDTO); return "redirect:/"; }

    redirect 알아보기

    response.setStatus
    notion image
    notion image
    302는 header에서 Location key값을 찾아서 이동한다(프로토콜)
     

    BoardRequest

    public class BoardRequest { // form에서 보낸 값을 바로 받아와야하기 때문에 name의 키값과 동일하게 필드 작성해야한다 @Data public static class SaveDTO{ private String title; private String content; } }
     

    3. Service

    @Transactional public void 게시글쓰기(BoardRequest.SaveDTO saveDTO) { boardRepository.save(saveDTO.getTitle(), saveDTO.getContent()); } // @Transactional이 commit 해준다 -> 메서드 내에 여러개가 있을 때 하나라도 실패하면 롤백 다 성공하면 커밋해줌
    Share article
    Contents
    1. Repository2. BoardController3. Service

    silver

    RSS·Powered by Inblog