10. 게시글 삭제 - 스프링부트(SpringBoot)

Haeun Shin·2021년 1월 28일
0

스프링 부트

목록 보기
10/10
post-thumbnail

1. 비즈니스 로직

BoardMapper.xml

  • 게시글을 삭제하는 쿼리 작성
<!-- 6. 게시글 삭제 -->
<update id="deleteBoard" parameterType="long">
  UPDATE
  	TB_Board
  SET
      delete_yn = 'Y'
    , delete_time = sysdate
  WHERE
  	idx = #{idx}
</update>

BoardMapper.java

  • DB와 연결하는 Mapper 인터페이스 작성
// 게시글 삭제
public int deleteBoard(Long idx);

BoardService.java

  • 게시글 삭제 인터페이스 작성
// 게시글 삭제
public boolean deleteBoard(Long idx); 

BoardServiceImpl.java

  • 게시글 삭제 인터페이스 구현
// 게시글 삭제
@Override
public boolean deleteBoard(Long idx) {
  int queryResult = 0;

  BoardDTO board = boardMapper.selectBoardDetail(idx);

  // 조회한 게시글이 null이 아니고, 삭제된 상태가 아닐 때 실행.
  if ( board != null && "N".equals(board.getDeleteYn()) ) {
  	queryResult = boardMapper.deleteBoard(idx);
  }

  // 1이면 정상적으로 쿼리가 실행되었다는 뜻이기 때문에, true 반환.
  return (queryResult == 1) ? true : false;
}

"N".equals(board.getDeleteYn() = false 가 생기길래, 1시간 넘게 씨름했는데..
초기에 컬럼 설정할 때, xxx_yn char(4)로 했었다. char()는 크기가 고정적일 때만 사용하는 거래서, 그냥 벗어나지 않게 잘 하면되는 줄 알았더니, 'N ' 띄어쓰기로 4byte 꽉 채워서 입력되어 있었다..ㅠ...!!!! 찾아낸 후 xxx_yn char(1)로 변경했다. 조심하자...


BoardController.java

  • 컨트롤러도 기본의 게시글 등록을 수정하여 사용한다.
// 게시글 삭제
@PostMapping(value = "/board/delete.do")
public String deleteBoard(@RequestParam(value = "idx", required = false) Long idx) {
  System.out.println("/board/delete.do 접근. idx = " + idx);
  // 올바르지 않은 접근 시
  if (idx == null) {
  	// TODO => 올바르지 않은 접근이라는 메시지를 전달하고, 게시글 리스트로 리다이렉트
  	return "redirect:/board/list.do";
  }

  try {
    System.out.println("try 접근. idx = " + idx);
    boolean isDeleted = boardService.deleteBoard(idx);
    System.out.println("deleteBoard 실행 후. isDeleted = " + isDeleted);

    // false면 이미 게시글이 삭제된 상태
    if (isDeleted == false) {
    	// TODO => 게시글 삭제에 실패하였다는 메시지를 전달
    }
  } catch (DataAccessException e) {
  	// TODO => 데이터베이스 처리 과정에 문제가 발생하였다는 메시지를 전달

  } catch (Exception e) {
  	// TODO => 시스템에 문제가 발생하였다는 메시지를 전달
  }

  return "redirect:/board/list.do";
}






2. 인터페이스

write.html

  • 기존의 write.html 맨 밑에(<html>태그 안에) 삭제 confirm을 물어보고, 폼을 생성해서 실행하는 스크립트 작성.
  <!-- body.html 안에 script 영역 -->
  <th:block layout:fragment="script">
    <!-- <script> 태그에 th:inline 속성을 javascript로 선언해야만 자바스크립트를 사용할 수 있다. -->
    <script th:inline="javascript">
      /*<![CDATA[*/
        function deleteBoard(idx) {
          if (confirm(idx + "번 게시글을 삭제할까요?")) {
          var uri = /*[[ @{/board/delete.do} ]]*/;
          var html = "";

          html += '<form name="dataForm" action="' + uri + '" method="post">';
          html += 	'<input type="hidden" name="idx" value="' + idx + '" />';
          html += '</form>';

          $("body").append(html);
          	document.dataForm.submit();
          }
        }
      /*]]>*/
    </script>
  </th:block>
</html>
  • 삭제 버튼에는 스크립트가 실행되도록 onclick 옵션을 걸어뒀음.






3. 확인

/board/list.do

  • 삭제 확인하고, 삭제된걸 확인하자.


1개의 댓글

comment-user-thumbnail
2021년 5월 6일

감사합니다 많은 도움이 되었습니다!

답글 달기