게시글 클릭 시, 해당 게시글의 조회수가 +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
- mapper.xml에 조회수 증가 Query 문을 추가한다.
<update id="updateReadcnt">
UPDATE tbl_qnaboard
SET readCnt = readCnt + 1
WHERE postNo = #{postNo}
</update>
- Mapper에 조회수 메소드를 추가한다.
(게시물 번호를 매개변수로 받음)
// 조회수 올리기
public Integer updateReadcnt(Integer postNo);
- 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
- 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
- 마지막으로 view에서 조회수 받는 부분을 변경해주면 된다.
