728x90
반응형
게시물을 읽었을 때 조회수가 자동으로 올라가게 하기 위해서는 컨트롤러에서 굳이 게시글을 뿌려줄때 메서드를 호출할 필요 없습니다.
게시글을 불러오는 메서드가 실행되었을때 Service쪽에서 추가적으로 조회수가 증가되는 코드를 실행되도록
구현하는게 이상적입니다.
이렇게되면 컨트롤러에서 직접 호출하지 않기때문에 Service interface에서 추상메서드를 구현하지않고
Service클래스의 게시글을 불러오는 로직에 추가적인 작업을 부여하도록 합니다.
@Service
public class BoardService implements IBoardService {
@Inject
private IBoardMapper mapper;
@Override
public BoardVO getArticle(Integer boardNo) {
mapper.updateViewCnt(boardNo)
return mapper.getArticle(boardNo);
}
}
게시글 내용을 보는 요청이 들어왔을때 컨트롤러로 부터 인터페이스를 거쳐 Service클래스의 getArticle()메서드를 호출한 후 그 내부적으로 조회수증가 메서드도 함께 호출되게 구현합니다.
public interface IBoardMapper {
void updateViewCnt(Integer boardNo);
}
Mapper인터페이스에 메서드를 선언한 후
<select id="getArticle" resultMap="BoardMap">
SELECT *
FROM mvc_board
WHERE board_no=#{boardNo}
</select>
<update id="updateViewCnt" parameterType="int">
UPDATE mvc_board
SET view_cnt=view_cnt+1
WHERE boardNo=#{boardNo}
</update>
메서드가 호출이되면 각각의 쿼리문이 동시에 수행됩니다.
트랜잭션이란?
트랜잭션 적용
트랜잭션격리 (트랜잭션이 처리되는 중간에 외부간섭을 없앰)
@Service
public class BoardService implements IBoardService {
@Inject
private IBoardMapper mapper;
//트랜잭션 적용
@Transactional(isolation = Isolation.READ_COMMITTED)
@Override
public BoardVO getArticle(Integer boardNo) {
mapper.updateViewCnt(boardNo)
return mapper.getArticle(boardNo);
}
}
중간의 외부적인 간섭이나 절차적인 오류로가 잃어나지 않는 이상 무조건 함께 처리되도록 트랜잭션을 적용합니다
만약 게시물을 보지 못한다면 조회수도 오를수 없게 만드는 기능입니다.
728x90
반응형
'SpringFramework > Board게시판' 카테고리의 다른 글
새로 생성한 게시물 제목에 new 마크 붙히기 (0) | 2020.09.08 |
---|---|
[미완성] 페이징 쪽나누기 (rowNum 쿼리 해설 완성) (0) | 2020.09.06 |