Spring Framework기반 조회수 구현하기

Hi_na·2023년 5월 16일

Project

목록 보기
5/5
post-thumbnail

🔍 Spring Framework기반의 조회수를 구현해보기

게시글 클릭 시, 해당 게시글의 조회수가 +1씩 올라간다.

  1. 게시판 테이블에 컬럼값 있는지 확인한다.
  1. DTO, VO 클래스에 조회수 컬럼값을 추가한다.
@Data			
public class QnABoardDTO {
	
	private Integer postNo;
	private String nickName;
	private String title;
	private String content;
	private Integer readCnt; // 조회수
	
} // end class
@Log4j2
@Value
public class QnABoardVO {	
	private Integer postNo;
	private String nickName;
	private String title;
	private String content;
	private Timestamp regiDate;
	private Timestamp modifyDate;
	private Integer readCnt; // 조회수
	
	```
} // end class
  1. mapper.xml에 조회수 증가 Query 문을 추가한다.
 <update id="updateReadcnt">
        UPDATE tbl_qnaboard
        SET readCnt = readCnt + 1
        WHERE postNo = #{postNo}
 </update>
  1. Mapper에 조회수 메소드를 추가한다.
    (게시물 번호를 매개변수로 받음)
// 조회수 올리기
	public Integer updateReadcnt(Integer postNo);
  1. Service에도 똑같이 추가한다.
// 조회수
	public abstract Integer updateReadcnt(Integer postNo) throws ServiceException;
@Service("QnABoardService")
public class QnABoardServiceImpl 
	implements 
		QnABoardService ,
		InitializingBean,
		DisposableBean {

	@Setter(onMethod_= {@Autowired} )
	private QnABoardMapper dao; // 영속성 계층의 DAO 빈을 주입받음
    
    // service 클래스에서 선언했던 메소드를 오버라이드함.
    @Override
	public Integer updateReadcnt(Integer postNo) throws ServiceException {
		log.trace("updateReadcnt({}) invoked.", postNo);
		
		try {
			return this.dao.updateReadcnt(postNo);
		} catch(Exception e) {
			throw new ServiceException(e);
		} // try-catch
		
	} // updateRecnt
  1. Controller에 조회수 기능을 추가한다.
@NoArgsConstructor
@Log4j2

@Controller
@RequestMapping("/board/qna")
public class QnABoardController {
	
	@Setter(onMethod_ = @Autowired)
	private QnABoardService service;
    
    @GetMapping(path={"/get", "/modify"},  params = "postNo")
    void get(@RequestParam Integer postNo, Model model) throws  ControllerException {
        log.trace("get() invoked.");

        try{
        	// 조회수 기능 추가
        	Integer rc = this.service.updateReadcnt(postNo);
        	model.addAttribute("_BOARD_", rc);
    	
            QnABoardVO vo = this.service.get(postNo);
            model.addAttribute("__BOARD__", vo);
             
        }catch (Exception e){
            throw new ControllerException(e);
        } // try-catch
    } // get
  1. 마지막으로 view에서 조회수 받는 부분을 변경해주면 된다.

0개의 댓글