저희가 처음 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번 게시물에 들어와서 목록 버튼을 눌러 게시판 목록 페이지로 가보겠습니다.

 

 

 

조회수가 증가했습니다!!!!

 

다음장에서는 게시판 목록 페이지의 제목부분에

해당 게시글의 댓글에 개수를 출력할 예정입니다.

+ Recent posts