게으른 완벽주의자의 개발자 도전기
Template 게시판, 회원관리, 댓글관리 나눠서 관리하기2(mapper, service, controller 게시글 등록, 게시글 목록) 본문
Template
Template 게시판, 회원관리, 댓글관리 나눠서 관리하기2(mapper, service, controller 게시글 등록, 게시글 목록)
머리방울 2022. 8. 7. 21:551. 게시글 등록
나는 로그인에 성공하면 글쓰기 버튼이 뜨도록 설정했다.
<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>