저번 포스팅에서는 댓글 등록까지 알아보았다.
이번엔 댓글 삭제와 게시물 삭제를 해보려고한다.
먼저,
board_detail.jsp
이곳에서 댓글 삭제 버튼을 만들어주고, 경로를 지정한다. 이때, hidden으로 받았던 댓글 번호를 가지고가야한다.
경로는 서블릿의 reply_delete.re
ReplyController.java 서블릿
hidden으로 가지고 왔던 boardNum을 int 자료형으로 바꿔준다. 이후 바로 mapper로 가자.
reply-mapper.mxl
이곳에와서 삭제 쿼리를 사용해준다. boardNum 값이 일치하는 데이터 쿼리만 삭제할 것이다.
매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 DTO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨.
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : DTO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<DTO> 객체.
ReplyService.java 인터페이스
인터페이스로 와서 댓글 삭제 메소드를 만들어 준다. DELETE쿼리는 리턴타입을 int 혹은 void만 사용하면 되고,
채워줄 값이 숫자이므로 int형을 사용했다.
ReplyServiceImple.java 클래스
sqlSession을 이용해 쿼리에 데이터를 넣어주고 commit을 시켜준다.
ReplyController.java 서블릿
서블릿으로 돌아와 만들었던 쿼리를 boardNum 데이터에 담아서 저장해주고, boardList.bo로 돌아가자.
BoardController.java 서블릿
이렇게 돌아오면 board_list.jsp에서 결과물을 확인할 수 있다.
다음으로, 게시글 삭제에 대해서 알아보자.
board_detail.jsp
만약 작성자( ${board.writer} )가 세션에 저장된 로그인 정보에 있는 memId와 같거나
로그인된 사람이 관리자 (admin) 이 예쓰(Y)라면 아래 기능을 할 수있도록 구현한 것이다.
위와 같이 "환풍"으로 접속했거나 관리자 모드인 "aa"로 접속하면 수정과 삭제가 뜰 것이다.
하지만 다른 사용자는 안뜰 것이다.
위 삭제 버튼을 누르면
goDelete( ${board.boardNum} ) 으로 자바스크립트를 사용했다.
goDelete 함수로, boardNum을 가지고 board_delete.bo로 이동하라고 한다.
BoardController.java 서블릿
boardNum을 받아와 int로 형변환 해주었고, Service를 쓰기전에 mapper -> service 단계를 거쳐오자.
위에서 했던 댓글 삭제와 똑같다.
board-mapper.xml
BoardService.java 인터페이스
단, BoardServiceImpl.java 클래스
이곳에서는 좀 다르다. 에외구문을 사용하여 오류가 나타나면 rollback을 시켜주지만,
댓글 정보는 Board테이블의 기본키를 참조하므로 댓글이 모두 삭제된 후에야 게시글도 삭제가 된다.
따라서 게시글 삭제 이전에 댓글 삭제부터 해줘야하는 것이다.
BoardController.java 서블릿
이후 서블릿에서 boardNum값을 delete쿼리에 넣어준 뒤 boardList.bo로 뿌려주면 완성된다.
잘 사라져 있는 것을 볼 수 있다.
댓글