간펴니
간편 자바프로그래밍
간펴니
전체 방문자
오늘
어제
  • 전체보기 (185)
    • 알고리즘 (2)
    • JAVA (69)
      • 이펙티브 자바 (47)
      • JAVA 병렬프로그래밍 (5)
      • 자바 (17)
    • SPRING (60)
      • Spring (12)
      • IceWater Community (37)
      • Homme Shop (10)
      • 토비의 스프링 (1)
    • SPRING BOOT (4)
      • WhiteRecord (7)
    • 오류 (9)
    • DB (10)
      • ORACLE (5)
      • MYSQL (1)
      • MYBATIS (4)
      • JPA (0)
      • 대용량 데이터 베이스 (0)
      • SQL (0)
    • FRONT (8)
      • JSP (2)
      • JavaScript (2)
      • Jquery (3)
      • Thymeleaf (1)
    • AWS (6)
    • JNI (10)
    • 회고 (0)
    • MQ (0)
    • Radis (0)
    • Git (0)
    • Docker (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 컨셉 변경

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
간펴니

간편 자바프로그래밍

SPRING/IceWater Community

[스프링] 게시글 조회수와 트랜잭션 구현

2021. 8. 25. 19:36
728x90

오라클 사용중입니다.

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은 아까 설정한 트랜잭션 어노테이션인데, 스프링에선 라이브러리 추가 후 저렇게 간단하게 사용할 수 있다.

트랜잭션에 관한 글은 매우 많으니 생략하도록 하고, 트랜잭션을 사용하지 않으면 게시글을 읽지못한 상황(오류발생 등..)에서 조회수가 증가하지 않게 된다.

 

 

 

 

 

728x90
저작자표시 (새창열림)

'SPRING > IceWater Community' 카테고리의 다른 글

[스프링]게시판 첨부파일 다운로드 (3)  (1) 2021.08.30
[스프링] 게시글 첨부파일 조회 구현 설명(select) (2)  (3) 2021.08.30
[스프링]게시판 첨부파일 업로드 구현 설명(insert) (1)  (1) 2021.08.30
[스프링]-댓글 수 구현 : 동기,비동기 방식을 사용할 때의 구현, 차이점과 2가지의 댓글 수 변경 로직  (0) 2021.08.26
스프링 페이징 구현 - 게시글 수정,삭제,내용보기 후 검색어유지  (1) 2021.08.23
    'SPRING/IceWater Community' 카테고리의 다른 글
    • [스프링] 게시글 첨부파일 조회 구현 설명(select) (2)
    • [스프링]게시판 첨부파일 업로드 구현 설명(insert) (1)
    • [스프링]-댓글 수 구현 : 동기,비동기 방식을 사용할 때의 구현, 차이점과 2가지의 댓글 수 변경 로직
    • 스프링 페이징 구현 - 게시글 수정,삭제,내용보기 후 검색어유지
    간펴니
    간펴니
    개발공부 기록하는 곳

    티스토리툴바