1. 게시글 삭제
BoardRepository 에서 게시글 삭제 쿼리를 만들어 보자.
JPA API , JPQL 객체 지향 쿼리 작성 (삭제 권한)
/**
* 게시글 삭제하기
* @param id
*/
// DELETE JPA API 메서드를 활용(영속성 컨텍트), JPQL --> QDSL ... namedQuery ...
@Transactional
public void deleteById(int id) {
Query jpql = em.createQuery("DELETE FROM Board b WHERE b.id = :id");
jpql.setParameter("id", id);
jpql.executeUpdate();
}
/**
* JPA API 활용
*/
// DELETE JPA API 메서드를 활용(영속성 컨텍트), JPQL --> QDSL ... namedQuery ...
@Transactional
public void deleteByIdWithAPI(int id) {
em.remove(findById(id));
}
BoardController 에서 게시글 삭제 요청
// 게시글 삭제
// form 태그에서는 GET, POST 방식만 지원
@PostMapping("/board/{id}/delete") // form 활용이기 때문에 delete 선언
public String delete(@PathVariable(name = "id") Integer id, HttpServletRequest request) {
// 유효성, 인증검사
// 세션에서 로그인 사용자 정보 가져오기 -> 인증, 인가(권한)
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) {
return "redirect:/login-form";
}
// 권한 체크
Board board = boardRepository.findById(id);
if (board == null) {
return "redirect:/error-404";
}
if (!board.getUser().getId().equals(sessionUser.getId())) {
return "redirect:/error-403";
}
boardRepository.deleteByIdWithAPI(id);
return "redirect:/";
}
detail.mustache
<!-- 수정, 삭제버튼 -->
{{#authUser}}
<div class="d-flex justify-content-end">
<a href="/board/{{board.id}}/update-form" class="btn btn-warning me-1">수정</a>
<form action="/board/{{board.id}}/delete" method="post">
<button class="btn btn-danger">삭제</button>
</form>
</div>
{{/authUser}}
목차로 돌아가기