D+33::게시글 삭제(댓글있는 게시글)_트랜잭션(Transaction)/비밀글 상세보기

Am.Vinch·2022년 8월 16일
0

20220810_wed

실습내용

  • 게시글 삭제/비밀글 상세보기

주의)

  • 게시글 삭제할 때 댓글이 달려있는 글은 실제로 삭제를 하면 오류가 발생한다! '자식레코드가 발견되었다' 라고 오류메세지가 뜬다.
  • 댓글테이블은 게시판테이블을 외래키로 참조하기 때문에 부모자식간의 관계가 성립한다.
    : 게시판(부모) - 댓글(자식)
  • 해결방법
    : 삭제하려는 게시글의 댓글을 먼저 전부 삭제하고 게시글을 삭제한다.
  1. <delete id="deleteReplyByBoardNum">
    DELETE BOARD_REPLY
    WHERE BOARD_NUM = #{boardNum}
    </delete>
  2. //게시글 번호를 통한 댓글 삭제
    void deleteReplyByBoardNum(int boardNum);

  3. @Override
    public void deleteReplyByBoardNum(int boardNum) {
    sqlSession.delete("replyMapper.deleteReplyByBoardNum",boardNum);
    sqlSession.commit();

    }
  4. //게시글 삭제페이지(자바스크립트)
    //순서중요! 댓글삭제부터 한 뒤 게시글 삭제!!
    else if(command.equals("/boardDelete.bo")) {
    int boardNum = Integer.parseInt(request.getParameter("boardNum"));

    		//댓글 삭제
    		replyService.deleteReplyByBoardNum(boardNum);
    		
    		//게시글 삭제(int 사용 o)
    		int result = boardService.deleteBoard(boardNum);
    		//(int사용x -> void 넣었을때) 
    		//boardService.deleteBoard(boardNum);
    		
    		request.setAttribute("result", result);
    		page="delete_result.jsp";
    		
    	}

But

이렇게 진행시 트랜잭션의 오류가 났을 때 각각 롤백을 시켜줘야하기 때문에 수정이 필요하다.
한번에 댓글과 게시글이 삭제될 수 있는 메소드를 만들어 한번에 사용할수있도록 만들어야한다!!!

  • 트랜잭션(Transaction)

실습내용
게시글 목록페이지에서 공개글 제목을 클릭하면 바로 상세페이지로 이동한다.
비공개글의 제목을 클릭하면 비밀번호를 입력할 수 있는 페이지로 이동한다.
입력한 비밀번호가 일치할 때만 다시 상세페이지로 가야한다.
만약,관리자라면 비공개글도 다이렉트로 상세페이지로 이동시킨다.(비번처리x)

다시수정해서 만든다면?

1.Mapper 쿼리생성

<delete id="deleteReplyByBoardNum">
DELETE BOARD_REPLY
WHERE BOARD_NUM = #{boardNum}
</delete>
  1. 한꺼번에 만들어야하기때문에 인터페이스 및 인터페이스Impl 메소드와 오버라이딩 모두 삭제!
    //게시글 번호를 통한 댓글 삭제
    void deleteReplyByBoardNum(int boardNum);

3.보드컨트롤러에서 게시글과댓글 한꺼번에 삭제하는 else if문 만들기!!!

//게시글 삭제페이지(자바스크립트)
//순서중요! 댓글삭제부터 한 뒤 게시글 삭제!!
else if(command.equals("/boardDelete.bo")) {
int boardNum = Integer.parseInt(request.getParameter("boardNum"));
boardService.deleteBoard(boardNum);
request.setAttribute("result", boardNum);
page="delete_result.jsp";


  • 게시판 비밀글 작업관리

1.board_list.jsp

<c:choose>
<c:when test="sessionScope.loginInfo.isAdmineqY"><ahref=boardDetail.bo?boardNum={sessionScope.loginInfo.isAdmin eq 'Y'}"> <a href='boardDetail.bo?boardNum={board.boardNum}'>board.title</a></c:when><c:otherwise><c:choose><c:whentest="{board.title }</a> </c:when> <c:otherwise> <c:choose> <c:when test="{board.isPrivate eq 'Y' }">
board.title</a></c:when><c:otherwise><ahref=boardDetail.bo?boardNum={board.title }</a> </c:when> <c:otherwise> <a href='boardDetail.bo?boardNum={board.boardNum}'>${board.title }
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>


유의할점!

board-mapper에서 만든 selectBoardList 에서 조회할때 있는 부분만 사용가능하다!


실습내용

  • Mybatis
  • 세션
  • template
  • 쇼핑몰 사이트 만들기
    -> javascript,첨부파일 이용하기
    1. 먼저 DB 쇼핑몰 테이블 만들기 --쇼핑몰테이블 생성하기
      --1. 회원 테이블
      CREATE TABLE SHOP_MEMBER(
      MEM_ID VARCHAR2(100) PRIMARY KEY
      , MEM_PW VARCHAR2(100) NOT NULL
      , MEM_NAME VARCHAR2(100) NOT NULL
      , GENDER VARCHAR2(10) -- MALE,FEMALE
      , MEM_TELL VARCHAR2(100) -- INPUT 태그 하나로 만드세요 SELECT박스 없이!!
      , MEM_ADDR VARCHAR2(100)
      , ADDR_DETAIL VARCHAR2(100)
      , IS_ADMIN VARCHAR2(10) DEFAULT 'N'-- Y,N
      );

SELECT FROM SHOP_MEMBER;
--2. 상품 카테고리 테이블(소설,인터넷,경제,사회경제,예술문화...)
CREATE TABLE ITEM_CATEGORY(
CATE_CODE VARCHAR2(50) PRIMARY KEY
, CATE_NAME VARCHAR2(50) NOT NULL
);
SELECT
FROM ITEM_CATEGORY;
--3. 상품 테이블
DROP TABLE SHOP_ITEM;
CREATE TABLE SHOP_ITEM(
ITEM_CODE VARCHAR2(50) PRIMARY KEY-- ITEM_001...
, ITEM_NAME VARCHAR2(100) NOT NULL
, ITEM_PRICE NUMBER NOT NULL
, ITEM_COMMENT VARCHAR2(100)
, ITEM_STOCK NUMBER DEFAULT 10
, CATE_CODE VARCHAR2(50) REFERENCES ITEM_CATEGORY (CATE_CODE) ON DELETE CASCADE --카테고리를 지우면 그 하위항목 모두 삭제됨.
);
DROP TABLE ITEM_CATEGORY;--테이블도 아이템카테고리(부모) 아래 SHOP_ITEM(자식)테이블을 먼저 지워야 삭제가능하다!!!

SELECT * FROM SHOP_ITEM;

2.이클립스 화면 만들기
프로젝트명: Shop (박스체크해서 생성하기)

css파일은 너무 길고 중복되어서 따로 만든다.
찾을 때 ,<컨트로 +h> 를 누르면 프로젝트 내 모든 파일 에서 찾기 가능하다.

  • 복사한 configuration.xml 파일 안에 memebr-mapper 만 남겨놓기
    <mappers>
    	<mapper resource="sqlmap/member-mapper.xml" />
    </mappers>
    
    ---
  • 폴더 만들기

  • webapp 폴더에서 index파일 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="itemList.it"></jsp:forward>
</body>
</html>
profile
Dev.Vinch

0개의 댓글