글 list 페이지에서 1개의 글을 클릭했을 때 '조회수'를 Update 한다.
[실행흐름]: 원리
1. BoardController 의 상세페이지를 담당하는 메서드: detatil 에서
- service.hitUp(id) 를 실행.
2. BoardService(interface)와 BoardServiceImp(구현객체)
1) BoardView hitup(int id);
2) 구현객체의 오버라이드 메소드에서 boardDao.hitUp(id)를 실행 + return boardDao.get(id);
3. BoardDao(interface)와 MyBatisBoardDao(구현객체)
3.1 hitUp(id) - 해당 글 ID로 UPDATE 쿼리문을 실행 ID의 hitCnt 컬럼을 +1
1) int hitUp(id)
2) mapper.hitup(id);
3.2 get(id) - 해당 글의 ID 값으로 상세 페이지를 get 하는 메서드
4. BoardDaoMapper.xml
1) id = "get" 인 쿼리문(id의 모든 컬럼)
2) id = "hitUp"인 쿼리문(hitCnt+1)
# 추가적으로 필요한 기능: 트랜잭션
# 무턱대고 생각했던 부분
이 기능을 어떻게 구현할까를 생각했을 때 굉장히 어렵게 접근했던 것 같다.
list 페이지의 해당 글을 클릭하는 이벤트가 발생할 때 자바스크립트에서 그 아이디 값을 얻어서,
다시 컨트롤러로 보내고,
그 아이디에 해당하는 로우의 hitCnt를 +1 해줄 생각을 했었다.
그런데 다른 사람들이 어떻게 이 기능을 구현했는지를 검색해 보니 내가 생각했던게 잘못되었다는 판단을 하게 되었다.
처음 글을 읽으면서는 다른 코드들을 보면서도 무슨 의미인지, 왜 이렇게 작성했는지 알지 못했지만
하나씩 곱씹어 보니 어떤 원리로 동작하는지를 알게 되었다.
Controller
Service
ServiceImp
BoardDao
MyBatisDao
BoardDaoMapper.xml