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

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

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

silver