Mission
Article 데이터를 DB에서 삭제하고, 이를 확인하시오
데이터 삭제 흐름 3단계
1. 삭제요청이 전달이 되면 /articles/{id}/delete
2. DB에서 찾고 삭제한 다음에
3. 결과 페이지로 Redirect 하는 거 까지 진행된다. redirect:/articles
삭제요청 HTTP로 전달이 되고 /articles/{id}/delete
이를 받은 Controller가 Repository를 통해서 DB속 데이터를 삭제한다. delete(1)
기존 데이터가 있는 경우에만 삭제해야한다.
삭제가 완료되었다면 결과페이지로 redirect 함으로서 마무리가 된다.
이때 삭제 완료 메시지를 같이 띄어주면 좋다 이를 위해 제공되는 클래스가
바로 RedirectAttributes 인데 , 해당 객체에 addFlashAttributes("msg", "Article deleted!"); 메서드는 redirect 된 페이지에서 일회성으로 사용할 데이터를 등록하게 한다.
1. 삭제 버튼 추가
/articles/show.mustache
<a href="/articles/{{article.id}}/delete" class="btn btn-primary">Delete</a>
2. 삭제 요청 받기
Controller에서
@GetMapping("/articles/{id}/delete")
public String delete(){
log.info("삭제 요청이 들어왔습니다. ");
return null;
}
HTML에서 공식적으로 DeleteMapping지원하지 않아서 GetMapping 으로
3. 삭제 처리 개요
1) 삭제 대상을 가져온다.
2) 그 대상을 삭제한다.
3) 결과 페이지로 리다이렉트한다.
3-1) 삭제 대상을 가져온다.
DB한테 일을 할려면 jpa 에서 제공하는 레파지토리를 통해 DB와 소통한다.
@GetMapping("/articles/{id}/delete")
public String delete(@PathVariable Long id){
log.info("삭제 요청이 들어왔습니다. ");
// 1) 삭제 대상을 가져온다.
Article target = articleRepository.findById(id).orElse(null); //id는 URL에서 가져올 수 있다.
//Long id 가 URL에 있는 {id}가 되기 위해서는 @Pathvariable 어토테이션을 추가하면 된다.
3-2) 그 대상을 삭제한다. (대상 엔티티 삭제)
if (target != null) {
articleRepository.delete(target);
3-3) 결과 페이지로 리다이렉트한다.
삭제하면 목록페이지로 리다이렉트 (articles 페이지를 재요청)
return "redirect:/articles";
4. 삭제 완료 메시지
파라미터에 RedirectAttributes rttr 객체를 받아올 수 있게끔 선언
얘를 가지고 삭제가 된 경우에
rttr.addFlashAttribute("msg", "삭제가 완료되었습니다."); //휘발성 데이터 등록!
메서드를 통해 msg라는 값에 데이터를 넣을 수 있다.
5.부트스트랩 ALERT
6.DELETE 쿼리
DELETE article
WHERE id = 3;
-> 3번 article을 지우는 쿼리이다.
요약
1. 삭제요청을 했을 때 누가 받는다?
2. 컨트롤러가 GetMapping을 통해서 받는다 @GetMapping("/articles/{id}/delete")
3. 여기서 {id}값을 가져오는데 뭐를 통해서 ?
4. @PathVariable Long id 통해서 id를 가져오는데
5.Article target = articleRepository.findById(id).orElse(null); 얘를 가지고 DB에서 대상을 찾고
5. 찾아졌다면 삭제한다 뭐를 통해서?
6. Repository 가 제공하는 delete 메서드를 통해서 삭제한다.
if (target != null) {
articleRepository.delete(target);
}
7. 삭제가 일어날 때 delete sql 문법이 동작해서 지워진다.
8. 그리고 지워지고 난 다음에 결과페이지로 리다이렉트 했는데 삭제가 된 것을 알려주기 위해
리다이렉트에서 사용하기 위한 데이터는 RedirectAttributes라는 객체를 통해
addFlashAttribute 라고 해서 데이터를 등록할 수 있었다.
public String delete(@PathVariable Long id, RedirectAttributes rttr){
rttr.addFlashAttribute("msg", "삭제가 완료되었습니다.");
- 데이터 삭제 흐름 3단계
🔥 구글링 훈련하기
- JPA Repository delete
- Spring RedirectAttributes addFlashAttribute
- Bootstrap Alert
내용참고
https://www.youtube.com/channel/UCpW1MaTjw4X-2Y6MwAVptcQ
'Spring Boot > Spring Boot 입문 홍팍' 카테고리의 다른 글
[Spring boot] (18) Rest API 와 JSON (0) | 2023.08.08 |
---|---|
[Spring boot] (17) CRUD와 SQL 쿼리 (0) | 2023.08.08 |
[Spring boot] (15) 데이터 수정하기 (DB까지) (0) | 2023.08.07 |
[Spring boot] (14) 수정 폼 만들기 (0) | 2023.08.07 |
[Spring boot] (13) 링크와 리다이렉트 (0) | 2023.08.07 |