/articles/{id}/delete: 클라이언트가 서버로 삭제 요청
delete(id): 서버는 DB에서 해당 데이터를 찾아 삭제
redirect:/articles: 클라이언트를 리다이렉트된 페이지로 보냄
<a href="/articles/{{article.id}}/edit" class="btn btn-primary">Edit</a>
<a href="/articles/{{article.id}}/delete" class="btn btn-danger">Delete</a>
<a href="/articles">Go to Article List</a>
{{>layouts/footer}}
public class ArticleController {
(중략)
public String update(ArticleForm form) {
(중략)
@GetMapping("/articles/{id}/delete") // URL 요청 접수
public String delete() { // 메소드 생성 및 null값 반환
log.info("삭제 요청이 들어왔습니다!!"); // 잘 동작하는지 확인하는 로그
// 1. 삭제할 대상 가져오기
// 2. 대상 엔티티 삭제하기
// 3. 결과 페이지로 리다이렉트하기
return null;
}
}
public String delete(@PathVariable Long id) { // id를 매개변수로 가져오기
log.info("삭제 요청이 들어왔습니다!!");
// 1. 삭제할 대상 가져오기
Article target = articleRepository.findById(id).orElse(null); // 데이터 찾기
log.info(target.toString()); // target에 데이터 있는지 없는지 확인
// 2. 대상 엔티티 삭제하기
if (target != null) { // 삭제할 대상이 있는지 확인
articleRepository.delete(target); // delete 메소드로 대상 삭제
// 3. 결과 페이지로 리다이렉트하기
return "redirect:/articles";
public String delete(@PathVariable Long id, RedirectAttributes rttr) { // RedirectAttributes 객체 사용, 객체 이름은 rttr
log.info("삭제 요청이 들어왔습니다!!");
// 1. 삭제할 대상 가져오기
Article target = articleRepository.findById(id).orElse(null);
log.info(target.toString());
// 2. 대상 엔티티 삭제하기
if (target != null) {
articleRepository.delete(target);
rttr.addFlashAttribute("msg", "삭제됐습니다!"); // 한 번 쓰고 사라지는 휘발성 데이터를 등록
}
// 3. 결과 페이지로 리다이렉트하기
return "redirect:/articles";
}
}
(생략)
{{#msg}} // msg 사용 범위 설정
<div class="alert alert-primary alert-dismissible"> // 메세지 창 작성
{{msg}}
<button type="button" class="btn-close" data-bs-dismiss="alert"
aria-label="Close"></button>
</div>
{{/msg}} // msg 사용 범위 설정
DELETE article WHERE id = 3;
SELECT * FROM article;