20220810_wed
실습내용
- 게시글 삭제/비밀글 상세보기
주의)
- 게시글 삭제할 때 댓글이 달려있는 글은 실제로 삭제를 하면 오류가 발생한다! '자식레코드가 발견되었다' 라고 오류메세지가 뜬다.
- 댓글테이블은 게시판테이블을 외래키로 참조하기 때문에 부모자식간의 관계가 성립한다.
: 게시판(부모) - 댓글(자식)- 해결방법
: 삭제하려는 게시글의 댓글을 먼저 전부 삭제하고 게시글을 삭제한다.
<delete id="deleteReplyByBoardNum">
DELETE BOARD_REPLY
WHERE BOARD_NUM = #{boardNum}
</delete>
//게시글 번호를 통한 댓글 삭제
void deleteReplyByBoardNum(int boardNum);
@Override
public void deleteReplyByBoardNum(int boardNum) {
sqlSession.delete("replyMapper.deleteReplyByBoardNum",boardNum);
sqlSession.commit();
}
//게시글 삭제페이지(자바스크립트)
//순서중요! 댓글삭제부터 한 뒤 게시글 삭제!!
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
이렇게 진행시 트랜잭션의 오류가 났을 때 각각 롤백을 시켜줘야하기 때문에 수정이 필요하다.
한번에 댓글과 게시글이 삭제될 수 있는 메소드를 만들어 한번에 사용할수있도록 만들어야한다!!!
실습내용
게시글 목록페이지에서 공개글 제목을 클릭하면 바로 상세페이지로 이동한다.
비공개글의 제목을 클릭하면 비밀번호를 입력할 수 있는 페이지로 이동한다.
입력한 비밀번호가 일치할 때만 다시 상세페이지로 가야한다.
만약,관리자라면 비공개글도 다이렉트로 상세페이지로 이동시킨다.(비번처리x)
다시수정해서 만든다면?
1.Mapper 쿼리생성
<delete id="deleteReplyByBoardNum">
DELETE BOARD_REPLY
WHERE BOARD_NUM = #{boardNum}
</delete>
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="{board.boardNum}'>{board.isPrivate eq 'Y' }">
{board.boardNum}'>${board.title }
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
유의할점!
board-mapper에서 만든 selectBoardList 에서 조회할때 있는 부분만 사용가능하다!
실습내용
- Mybatis
- 세션
- template
- 쇼핑몰 사이트 만들기
-> javascript,첨부파일 이용하기
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(자식)테이블을 먼저 지워야 삭제가능하다!!!
2.이클립스 화면 만들기
프로젝트명: Shop (박스체크해서 생성하기)
css파일은 너무 길고 중복되어서 따로 만든다.
찾을 때 ,<컨트로 +h> 를 누르면 프로젝트 내 모든 파일 에서 찾기 가능하다.
<mappers>
<mapper resource="sqlmap/member-mapper.xml" />
</mappers>
---
<%@ 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>