/////
Search

221109

작성자
조예지
최민준
날짜
2022/11/09
학습 내용
update,delete
텍스트

Update

Html

{{>layouts/header}} {{#article}} <div class="card" style="width: 18rem;"> <div class="card-body"> <h5 class="card-title">{{title}}</h5> <h6 class="card-subtitle mb-2 text-muted">{{id}}</h6> <p class="card-text">{{content}}</p> <a href="/articles/new" class="card-link">new article</a> <a href="/articles" class="card-link">list article</a> </div> </div> <a href="/articles/{{id}}/edit" class="btn btn-primary">Edit</a> <a href="/articles/{{id}}/delete" class="btn btn-danger">Delete</a> {{/article}} {{>layouts/footer}}
HTML
복사
8일자 show에서 buttn 2개를 추가 한다
여기는 Edit Page입니다. {{#article}} <form action="/articles/{{id}}/update" method="post"> <input type="hidden" name="id" value="{{id}}"> <input type="text" name="title" value="{{title}}" /> <textarea row="3" name="content">{{content}}</textarea> <input type="submit"/> </form> <a href="/articles/{{id}}">1개 조회 페이지</a> <a href="/articles">articles List</a> {{/article}}
HTML
복사

input type=”hidden”

숨겨진 입력 필드는 폼 제출 시에 사용자가 변경해서는 안 되는 데이터를 함께 보낼 때 유용하게 사용된다.

Java

@GetMapping("/{id}/edit") public String edit(@PathVariable Long id, Model model) { Optional<Article> optionalArticle = articleRepository.findById(id); if (!optionalArticle.isEmpty()) { model.addAttribute("article", optionalArticle.get()); return "edit"; } else { model.addAttribute("message", String.format("%d가 없습니다.", id)); return "error"; } }
Java
복사
새로 수정할 데이터를 입력 받기
@PostMapping("/{id}/update") public String update(@PathVariable Long id, ArticleDto articleDto, Model model) { Article save = articleRepository.save(articleDto.toEntity()); model.addAttribute("article", save); return String.format("redirect:/articles/%d", save.getId()); }
Java
복사
id를 통해 db속 데이터를 조회한 후 db 정보를 수정
새로 저장할 때 데이터를 수정 할 때 둘 다 articleRepository.save 를 사용해서 db에 접근한다.

Duplicated Entry에러가 안 나는 이유

id있는 경우 Hibernate: update article2 set content=?, title=? where id=? id없는 경우 Hibernate: insert into article2 (content, title) values (?, ?)
Java
복사

Delete

@GetMapping("/{id}/delete") public String edit(@PathVariable Long id) { articleRepository.deleteById(id); return "redirect:/articles"; }
Java
복사
deleteById를 통해서