이번장은 해당 게시물에 있는 댓글을 게시판 목록의 제목옆에 댓글 수를 출력해보도록 하겠습니다.
select count(reply_number)
from reply
where board_number= 4;
해당 쿼리를 조회하면 4번 게시물에 달린 댓글의 수를 구할 수 있습니다.
이 댓글의 수를 board 테이블의 reply_count 컬럼에 저장 시켜야 합니다.
하지만 저희의 DB에는 reply_count 컬럼이 없기 때문에 추가하도록 하겠습니다.
alter table board add reply_count int DEFAULT '0';
컬럼을 추가했으니 BoardVO 에도 만들어줘야 하겠죠?
// BoardVO 추가 후 getter, setter 추가
private int reply_count;
댓글의 개수를 구한 후에 reply_count에 값을 저장시켜야 하는데요
서브쿼리를 이용하여 해당 글 번호의 댓글 수를 구한 후
업데이트 시키겠습니다.
일단 DB에서 테스트 해볼까요?
정상적으로 서브쿼리로 조회한 결과를 board 테이블에 reply_count로 업데이트 되었습니다.
이제 boardMapper.xml에 추가하도록 하겠습니다.
1. boardMapper.xml 추가
<update id="updateReplyCount" parameterType="int">
update board b
set b.reply_count = (select count(reply_number) from reply where board_number = #{board_number})
where b.board_number = #{board_number}
</update>
2. BoardDAO 추가
// BoardDAO.java
public void updateReplyCount(int board_number) throws Exception;
저희가 처음 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;