Contents
최종 게시판 기본 구현- cs 만들기
id와 createdAt 수정 불가 설정 : readonly="true”
{{> layout/header}}
<section>
<!-- name에 적어야 값이 넘어간다 -->
<form action="/board/{{model.id}}/update" method="post" enctype="application/x-www-form-urlencoded">
<input type="text" value="{{model.id}}" readonly="true"><br>
<input type="text" name="title" value="{{model.title}}"><br>
<input type="text" name="content" value="{{model.content}}"><br>
<input type="text" value="{{model.createdAt}}" readonly="true"><br>
<button type="submit">글쓰기</button>
</form>
</section>
</body>
</html>
- 컨트롤러
update
: 실제 게시글을 수정하는 요청을 처리 updateForm
: 수정 화면을 사용자에게 보여주기 @GetMapping("/board/{id}/update-form")
public String updateForm(@PathVariable("id") int id, Model model) {
BoardResponse.UpdateFormDTO updateFormDTO = boardService.게시글수정화면보기(id);
model.addAttribute("model", updateFormDTO);
return "update-form";
}
@PostMapping("/board/{id}/update")
public String update(@PathVariable("id") int id, BorderRequest.UpdateDTO updateDTO) {
boardService.게시글수정하기(id, updateDTO);
return "redirect:/board/" + id ;
}
- DTO
@Data
public static class UpdateDTO {
private String title;
private String content;
}
- 서비스
public BoardResponse.UpdateFormDTO 게시글수정화면보기(int id) {
Board board = boardRepository.findById(id); // 바로 return 불가능>DTO
return new BoardResponse.UpdateFormDTO(board);
}
@Transactional // commit or rollback
public void 게시글수정하기(int id, BorderRequest.UpdateDTO updateDTO) {
// 서비스와 컨트롤러는 1대1 매칭 (서비스 여러개 때려도 돌아는 감)
// updateDTO 에서 데이터 꺼내고 다시 적용 -객체 간 캡슐화와 무결성 지킴
boardRepository.update(id, updateDTO.getTitle(), updateDTO.getContent());
}
- 리포지토리
public void update(int id, String title, String content) {
Query q = em.createNativeQuery("update board_tb set title =?, content =? where id =?");
q.setParameter(1, title);
q.setParameter(2, content);
q.setParameter(3, id);
q.executeUpdate(); // insert, update, delete SQL쿼리문 실행 -안적으면 수정 적용 안됨
}
최종 게시판 기본 구현
- 메인

- 글상세보기

- 수정

- 글쓰기

Share article