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>