게시물 삭제시 첨부파일 삭제
게시물을 삭제했는데도 첨부파일에 대한 정보가 DB에 남아있으면 안 되기 때문에, 게시물 삭제 시에 첨부파일도 같이 삭제되도록 처리할 것이다.
BoardAttachMapper.xml 에 sql 코드를 추가한다.
<delete id="deleteAll">
delete tbl_attach where bno = #{bno}
</delete>
BoardServiceImp.java 에서 remove() 부분을 찾아 게시물 삭제시 첨부파일도 같이 삭제되도록 log.info 아래에 deleteAll 메소드를 추가하고, @Transactional 어노테이션을 추가한다.
@Transactional
@Override
public boolean remove(Long bno) {
log.info("remove......" + bno);
attachMapper.deleteAll(bno);
return mapper.delete(bno)==1;
}
BoardController.java 에 첨부파일을 삭제할 새로운 메소드를 추가한다.
private void deleteFiles(List<BoardAttachVO> attachList) {
if (attachList == null || attachList.size() == 0) {
return;
}
log.info("delete attach file......");
log.info(attachList);
attachList.forEach(attach -> {
try {
// import.java.nio.file.Paths;
Path file = Paths.get(
"c:\\upload\\" + attach.getUploadPath() + "\\" + attach.getUuid() + "_" + attach.getFileName());
Files.deleteIfExists(file);
} catch (Exception e) {
e.printStackTrace();
}
});
}
게시글 삭제 메소드인 remove 메소드도 수정해야 한다.
@PostMapping("/remove")
public String remove(@RequestParam("bno") Long bno, Criteria cri, RedirectAttributes rttr) {
log.info("remove..." + bno);
List<BoardAttachVO> attachList = service.getAttachList(bno);
if (service.remove(bno)) {
deleteFiles(attachList); //서버 디스크의 파일정보 삭제
rttr.addFlashAttribute("result", "success");
}
// rttr.addAttribute("pageNum", cri.getPageNum());
// rttr.addAttribute("amount", cri.getAmount());
// rttr.addAttribute("type", cri.getType());
// rttr.addAttribute("keyword", cri.getKeyword());
return "redirect:/board/list" ;
}
게시글 삭제시 댓글 삭제
이전에 댓글은 이번에는 댓글 부분이다.
ReplyMapper.java 에서 메소드의 원형을 추가한다.
public int deleteAll(Long bno);
ReplyMapper.xml 에도 추가한다.
<!-- 게시물 삭제시 관련 댓글 모두 삭제 -->
<delete id="deleteAll">
delete from tbl_reply where bno = #{bno}
</delete>
BoardServiceImp.java 에 @Setter 를 추가 선언하고,
@Setter(onMethod_ = @Autowired)
private ReplyMapper replyMapper; //댓글
게시글 삭제 메소드인 remove 메소드에서 attachMapper.deleteAll(bno) 바로 아래에 reply도 삭제할 수 있도록 한 줄을 추가한다.
@Override
public boolean remove(Long bno) {
...
attachMapper.deleteAll(bno); //첨부파일 삭제
replyMapper.deleteAll(bno); //댓글 삭제
...
}
서버를 구동한 후, 새 글을 첨부파일과 함께 등록해보고, 등록한 글을 삭제하고 나서
(1)tbl_board와 tbl_attach에서 해당 정보가 삭제되었는지,
(2)서버에 지정된 공간에서도 파일이 삭제되었는지 확인을 해본다.
이렇게 세 개의 테이블에서 삭제를 한 후 모든 데이터가 정상적으로 삭제된 것을 확인할 수 있다.
실제 서버에서도 삭제되었다.
결론 >> (1),(2) 모두 정상적으로 삭제된 것을 확인할 수 있다.
'개발입문 > SPRING 게시판 만들기' 카테고리의 다른 글
[SPRING] 로그인 처리 (0) | 2022.10.26 |
---|---|
[SPRING] 첨부파일 다운로드 및 수정/삭제 (0) | 2022.10.14 |
[SPRING] 첨부파일 업로드 (0) | 2022.10.14 |
[SPRING] 댓글 페이징 처리, 댓글 총 개수 보여주기 (0) | 2022.10.13 |
[SPRING] 댓글 화면 처리 및 CRUD (0) | 2022.10.13 |
댓글