저희가 처음 board 테이블을 생성 했을 때 view_count 컬럼도 있던거 기억하시나요?
CREATE TABLE board (
board_number int NOT NULL AUTO_INCREMENT,
title varchar(200) NOT NULL,
contents text,
name VARCHAR(30) NOT NULL,
create_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
view_count int DEFAULT 0,
PRIMARY KEY (board_number)
);
이제 해당 게시물을 클릭했을 때 조회수가 1이 증가 하도록 해볼겁니다.
1. boardMapper.xml 추가
<!-- boardMapper.xml -->
<update id="viewCount" parameterType="int">
update board
set view_count = view_count+1
where board_number = #{board_number}
</update>
boardMapper.xml 에 조회수를 증가시키는 쿼리를 작성했는데요
parameterType(조회결과)을 int로 설정해줍니다.
그러면 사용자가 해당 게시물을 클릭할 때 마다 위의 쿼리를 통해 update하여 조회수를 1씩 증가합니다.
2. BoardDAO 작성
// BoardDAO.java
public int viewCount(int board_number) throws Exception;
// BoardDAOImpl.java
private static String VIEWCOUNT = NS + ".viewCount";
@Override
public int viewCount(int board_number) throws Exception {
return session.update(VIEWCOUNT, board_number);
}
boardMapper에 있는 쿼리를 사용할 것이기 때문에
VUEWCOUNT 변수에 BoardMapper + ".viewCount";하여
매퍼에 접근할 수 있도록 합니다.
3. BoardService 작성
// BoardService.java
public int viewCount(int board_number) throws Exception;
// BoardService.java
@Override
public int viewCount(int board_number) throws Exception {
return boardDAO.viewCount(board_number);
}
4. BoardController 작성
해당 쿼리는 해당 게시물을 클릭하면 조회수를 증가시킬것이기 때문에
readReply메서드(상세보기)에 해당 코드를 추가합니다.
@RequestMapping(value = "/readView", method = RequestMethod.GET)
public String readReply(BoardVO board, @RequestParam("board_number") Integer board_number, @ModelAttribute("cri") Criteria cri, Model model) throws Exception {
logger.info("read");
service.viewCount(board_number); // 조회수 증가
model.addAttribute("BoardVO", service.read(board.getBoard_number()));
model.addAttribute("cri", cri);
List<ReplyVO> replyList = replyService.readReply(board.getBoard_number());
model.addAttribute("replyList", replyList);
return "board/readView";
}
조회수를 증가시키려면 board_number가 필요하기 때문에
readReply 파라미터에 @RequestParam("board_number") Integer board_number 를 추가하였습니다.
5. listPage.jsp 수정
<c:forEach items="${list}" var="boardVO">
<tr>
<td>${boardVO.board_number}</td>
<td><a href="/board/readView${pageMaker.makeQuery(pageMaker.cri.page)}&board_number=${boardVO.board_number}">${boardVO.title }</a></td>
<td>${boardVO.name}</td>
<td><fmt:formatDate pattern="YYYY-MM-dd" value="${boardVO.create_date}"/></td>
<td>${boardVO.view_count}</td>
</tr>
</c:forEach>
BoardController.java의 listPage 메서드에서
model.addAttribute("list", boards);
다음과 같이 BoardVO를 list에 담아서 jsp로 보냈기 때문에
위의 listPage.jsp에서 "${list}"로 받고 boardVO 변수로 사용하겠다 라고 선언했기에
boardVO.view_count로 조회수를 출력할 수 있습니다.
확인해볼까요??
891번의 조회수를 올려보겠습니다.
891번 게시물에 들어와서 목록 버튼을 눌러 게시판 목록 페이지로 가보겠습니다.
조회수가 증가했습니다!!!!
다음장에서는 게시판 목록 페이지의 제목부분에
해당 게시글의 댓글에 개수를 출력할 예정입니다.
'JAVA > blog' 카테고리의 다른 글
회원탈퇴 후 게시판에 사용자 기록이 남는 애로사항 (0) | 2020.08.05 |
---|---|
게시판 리스트 제목에 댓글 수 표시 (1) | 2020.08.05 |
비밀번호 암호화 기능 (0) | 2020.08.05 |
아이디 중복검사 기능 (0) | 2020.08.04 |
회원(4) - 회원탈퇴 (0) | 2020.07.31 |