오라클 사용중입니다.
ALTER TABLE MP_BOARD ADD(HIT NUMBER DEFAULT 0);
COMMIT;
조회수 칼럼 HIT 를 게시판 테이블에 추가
public class BoardVO {
private int bno;
private String title;
private String content;
private String writer;
private Date regdate;
private int hit;
게시판VO에 hit를 추가하고 getter&setter를 생성
<!-- 트랜젝션 START -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<!-- 트랜젝션 END -->
트랜잭션을 사용하기위해 트랜잭션관련 라이브러리를 가져올 코드를 pom.xml에 추가
스프링 트랜잭션 라이브러리를 사용하기위해
root-context의 Namespace로 가서 tx에 체크 후 저장해준다.
////// Namespace가 없다면 Source 상단에
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"
추가
///////////////////
<tx:annotation-driven transaction-manager="transactionManager" />
을 beans안에 넣어준다.
<select id="listPage" resultType="kr.co.vo.BoardVO" parameterType="kr.co.vo.SearchCriteria">
SELECT BNO,
TITLE,
CONTENT,
WRITER,
REGDATE,
HIT,
FROM (
SELECT BNO,
TITLE,
CONTENT,
WRITER,
REGDATE,
HIT ,
ROW_NUMBER() OVER(ORDER BY BNO DESC) AS RNUM
FROM MP_BOARD
WHERE 1=1
<include refid="search"></include>
) MP
WHERE RNUM BETWEEN #{rowStart} AND #{rowEnd}
ORDER BY BNO DESC
</select>
원래의 게시글목록 조회 쿼리Mapper에
조회수컬럼 HIT를 추가해준다
<update id="boardHit" parameterType="int">
UPDATE MP_BOARD SET
HIT = HIT+1
WHERE BNO = #{bno}
</update>
그 후 한번 게시글을 읽을때마다 조회수에 +1을 해줄 update쿼리를 추가한다.
DAO
public void boardHit(int bno) throws Exception;
DAOImpl
@Override
public void boardHit(int bno) throws Exception {
// TODO Auto-generated method stub
sqlSession.update("boardMapper.boardHit", bno);
}
DAO와 DAOImpl 에 조회수증가 쿼리가 실행될때 bno의 값 {bno} (게시글PR)을 파라미터로 받아서 사용할 수 있게 해준다.
ServiceImpl
// 게시물 조회
@Transactional(isolation = Isolation.READ_COMMITTED)
@Override
public BoardVO read(int bno) throws Exception {
dao.boardHit(bno);
return dao.read(bno);
}
그 후 ServiceImpl에서 dao에 조회수증가 쿼리를 게시글 내용보기 서비스에 넣어준다.
과정은
게시글 목록(listPage)에서 조회수를 볼 수 있는데, 목록에 게시글 제목을 클릭하면 내용보기(read)로 넘어간다.
이때 조회수 증가 쿼리를 같이 실행시키면서 조회수에 1이 증가되는 방식이다.
bno값으로 게시글을 구분해서 게시글마다 조회수가 각각 0부터 +1씩 들어가게 된다.
@Transactional은 아까 설정한 트랜잭션 어노테이션인데, 스프링에선 라이브러리 추가 후 저렇게 간단하게 사용할 수 있다.
트랜잭션에 관한 글은 매우 많으니 생략하도록 하고, 트랜잭션을 사용하지 않으면 게시글을 읽지못한 상황(오류발생 등..)에서 조회수가 증가하지 않게 된다.
'SPRING > IceWater Community' 카테고리의 다른 글
[스프링]게시판 첨부파일 다운로드 (3) (1) | 2021.08.30 |
---|---|
[스프링] 게시글 첨부파일 조회 구현 설명(select) (2) (1) | 2021.08.30 |
[스프링]게시판 첨부파일 업로드 구현 설명(insert) (1) (1) | 2021.08.30 |
[스프링]-댓글 수 구현 : 동기,비동기 방식을 사용할 때의 구현, 차이점과 2가지의 댓글 수 변경 로직 (0) | 2021.08.26 |
스프링 페이징 구현 - 게시글 수정,삭제,내용보기 후 검색어유지 (1) | 2021.08.23 |