9/03/2019

스프링 게시판 만들기 #8. 게시물 삭제 구현

#7. 게시물 수정 구현#8. 게시물 삭제 구현 사이에 nav를 추가하는 과정이 누락되어 추가합니다.

#7-5. 메뉴 인클루드 (누락본)

게시물 작성, 조회, 수정이 가능하니, 마지막으로 삭제 기능을 넣겠습니다.

게시물 조회 페이지(view)에 삭제 링크를 추가합니다.

<a href="/board/delete?bno=${view.bno}">게시물 삭제</a>

게시물을 구분지을 수 있는 고유번호인 게시물 번호(bno)를 이용하여 게시물을 삭제할 수 있습니다.

프로젝트를 실행하고 게시물 조회 페이지로 이동해보면, 이렇게 게시물 삭제 링크가 있는걸 확인할 수 있습니다. 물론 아직 아무런 작업도 하지 않았기 때문에 클릭하면 에러가 발생합니다.

매퍼(mapper)에 추가하기 전, DBMS에서 쿼리를 작성하고 실행하여 정상적으로 작동되는지 확인합니다.

정상적으로 작동되는 쿼리를 매퍼에 추가합니다.

<!-- 게시물 삭제 -->
<delete id="delete" parameterType="int">
 delete
  from tbl_board
 where bno = #{bno}
</delete>

게시물 번호만 있으면 삭제할 수 있기 때문에, 매개변수 타입(parameterType)은 정수(int)로 했습니다.

매퍼에 코드를 추가했으면, DAO와 DAOImpl에 코드를 추가합니다.

// 게시뮬 삭제
public void delete(int bno) throws Exception;
// 게시물 삭제
public void delete(int bno) throws Exception {
 sql.delete(namespace + ".delete", bno);
}

다음으로 Service와 SericeImpl에도 코드를 추가합니다.

// 게시물 삭제
public void delete(int bno) throws Exception;
// 게시물 삭제
public void delete(int bno) throws Exception {
 dao.delete(bno);
}

마지막으로 컨트롤러(Controller)에 코드를 추가합니다.

// 게시물 삭제
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String getDelete(@RequestParam("bno") int bno) throws Exception {
  
 service.delete(bno);  

 return "redirect:/board/list";
}

게시물을 삭제하게되면 게시물 목록 페이지로 이동할 수 있도록 반환(return)에 게시물 목록 페이지의 URL을 입력했습니다.

삭제할 게시물의 조회 페이지에서, 게시물 삭제 링크를 클릭합니다.

게시물이 삭제되며, 게시물 목록 페이지로 이동되었습니다.

게시물 수정
  1. 크아악! 이런 대단한 자료! 감사합니다!

    답글삭제
  2. 정말 최고입니다 ㅇ_ㅇbb 꾸주루 GOD

    답글삭제
  3. 뀌애액 감사합니다

    답글삭제
  4. 익명9/15/2021

    유튜브 강의보다 백배 낫네

    답글삭제
  5. 짱짱 많은도움 얻고있습니다 ㅠㅜㅠ 감사합니다

    답글삭제
  6. 글 삭제시 그 해당 고유번호(bno)가 사라져 버리는데 상관없는건가요?

    답글삭제
  7. 안녕하세요!
    kuzuro님 블로그를 참고하며 스프링을 공부하고 있는데 정말 많은 도움 받고 있습니다
    정말 감사합니다!

    답글삭제
  8. 익명1/10/2022

    안녕하세요, 덕분에 스프링 공부하는데 많이 도움 얻고 있습니다. 혹시 글을 지워도 고유번호bno는 순서대로 정렬할 방법이 없을까요?

    답글삭제
    답글
    1. 안녕하세요? 방문해주셔서 감사합니다.

      고유번호는 말그대로 고유한 번호이므로 변경되면 안되는 키값입니다.
      본문에서는 단순히 숫자 1부터 하나씩 증가하는 값을 가지고 있지만, 경우에 따라 숫자가 아닌 날짜나 문자+숫자 같은 구조로 하기도 합니다.

      그러므로 고유번호인 bno가 아니라, 단순히 순서를 표시하는 컬럼이 하나 더 필요합니다. 오라클에서는 rownum이라는 기본적으로 지원하는 기능이 있으나, 본문에서 사용하는 마리아DB(=mysql)은 해당 기능이 없어서 직접 만들어야합니다.


      select
      rownum, bno, title
      from (
      select
      @rownum:=@rownum+1 as rownum, bno, title
      from tbl_board, (select @rownum:=0) r
      ) t
      limit 100, 10


      대략 이런 느낌으로 작성하면 bno와 별개로 순서 번호를 가져올 수 있습니다.

      삭제
  9. delete 메소드를 post로 작성하려면 어떻게 해야할까요?ㅜ

    답글삭제
  10. 익명8/21/2023

    보물같은 자료 감사합니다 !!!!!!!!!!!!!

    답글삭제