Template
Template 게시판, 회원관리, 댓글관리 나눠서 관리하기2(mapper, service, controller 게시글 등록, 게시글 목록)
머리방울
2022. 8. 7. 21:55
1. 게시글 등록
나는 로그인에 성공하면 글쓰기 버튼이 뜨도록 설정했다.
<c:if test="${not empty sessionScope.loginInfo }">
<div align="center">
<input type="button" value="글쓰기" onclick="location.href='boardWriteForm.bo';">
</div>
</c:if>
1) mapper sql 작성
<insert id="insertWriteBoard">
INSERT INTO FINAL_BOARD
(BOARD_NUM
, TITLE
, CONTENT
, IS_PRIVATE
, BOARD_PW
, WRITER
) VALUES(
(SELECT NVL(MAX(BOARD_NUM), 0) + 1 FROM FINAL_BOARD)
(★꼭 소괄호로 감싸서 넣어주어야 한다!!)
, #{title}
, #{content}
, #{isPrivate}
, #{boardPw}
, #{writer}
)
</insert>
2) 인터페이스 메소드 생성
3) controller
else if (command.equals("/reg_board.bo")) {
String title = request.getParameter("title");
String content = request.getParameter("content");
String isPrivate = request.getParameter("isPrivate");
String boardPw = request.getParameter("boardPw");
sql 쿼리문에서는 writer 작성했지만 실질적으로 데이터 받아오진 않았다.
쿼리 테이블을 만들 때 MEM_ID를 참조하기로 했기 때문이다.
( WRITER VARCHAR2(100) REFERENCES BOARD_MEMBER (MEM_ID))
즉, 작성자 = 로그인 한 사람의 id 이는 세션에 저장되어 있다.
세션 객체만들기
HttpSession session = request.getSession();
데이터를 가져 오니까 getAttribute("저장된 데이터 이름")
형 변환 why? getAttribute 리턴값이 object이기 때문에 같은 자료형으로 받도록 변형해준다.
MemberDTO loginInfo = (MemberDTO)session.getAttribute("loginInfo");
loginInfo.getMemId();
BoardDTO board = new BoardDTO();
board.setTitle(title);
board.setContent(content);
board.setIsPrivate(isPrivate);
board.setBoardPw(boardPw);
board.setWriter(loginInfo.getMemId());
boardService.insertWriteBoard(board);
page ="reg_alert.jsp";
}
2. 게시글 목록
1) mapper sql 작성
<resultMap type="dto.BoardDTO" id="board">
<id column="BOARD_NUM" property="boardNum"/>
<result column="TITLE" property="title"/>
<result column="WRITER" property="writer"/>
<result column="CONTENT" property="content"/>
<result column="READ_CNT" property="readCnt"/>
<result column="CREATE_DATE" property="createDate"/>
<result column="IS_PRIVATE" property="isPrivate"/>
<result column="BOARD_PW" property="boardPw"/>
</resultMap>
<select id="selectBoardList" resultMap="board">
SELECT BOARD_NUM
, TITLE
, WRITER
, TO_CHAR(CREATE_DATE,'YYYY-MM-DD') AS CREATE_DATE
, READ_CNT
, IS_PRIVATE (비밀글여부 표시하기 위해 데이터 가져옴)
FROM FINAL_BOARD
ORDER BY BOARD_NUM DESC
</select>
2) 인터페이스 메소드 생성
List<BoardDTO> selectBoardList();
@Override
public List<BoardDTO> selectBoardList() {
List<BoardDTO> list = sqlSession.selectList("boardMapper.selectBoardList");
sqlSession.commit();
return list;
3) controller
if(command.equals("/boardList.bo")) {
List<BoardDTO> boardList = boardService.selectBoardList();
request.setAttribute("boardList", boardList);
contentPage="board_list.jsp";
4) 목록.jsp
<table>
<thead>
<tr>
<td>글번호</td>
<td>제 목</td>
<td>작성자</td>
<td>작성일</td>
<td>조회수</td>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${boardList.size() eq 0}">
<tr>
<td colspan="5">게시글이 없습니다.</td>
</tr>
</c:when>
<c:otherwise>
<c:forEach var="board" items="${boardList }">
<tr>
<td>${board.boardNum } </td>
<td>
★자물쇠모양이 비밀글일때만 적용되도록 설정했다.
<c:if test="${board.isPrivate eq 'Y'}">
<img src="lock.png" width="30px">
</c:if>
제목을 누르면 상세페이지로 가도록 만들었다.
<a href ="boardDetail.bo?boardNum=${board.boardNum }">
${board.title }
</a>
</td>
<td>${board.writer }</td>
<td>${board.createDate }</td>
<td>${board.readCnt }</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</tbody>
</table>
로그인했을 때만 글쓰기 버튼이 나오도록 설정했다.
<c:if test="${not empty sessionScope.loginInfo }">
<div align="center">
<input type="button" value="글쓰기" onclick="location.href='boardWriteForm.bo';">
</div>
</c:if>