본문 바로가기
개발입문/SPRING 게시판 만들기

[SPRING] 게시글 삭제시 첨부파일과 댓글도 함께 삭제

by 양히◡̈ 2022. 10. 14.

게시물 삭제시 첨부파일 삭제

게시물을 삭제했는데도 첨부파일에 대한 정보가 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) 모두 정상적으로 삭제된 것을 확인할 수 있다.

 

 

 

 

댓글