mybatis

rowbound 사용법 및 data 많을 때의 처리법

초이짬 2016. 8. 8. 15:53
728x90

===아래 서비스 영역 참조===

public void selectSampleBoardList(SampleBoardVO sampleBoardVO) throws Exception {
// 게시판 등록 글 총 개수 구하기
sampleBoardVO.setTotalRecordCount(sampleBoardDAO.selectSampleBoardListCnt(sampleBoardVO));
//목록 조회
sampleBoardVO.setSampleBoardList(sampleBoardDAO.selectSampleBoardList(sampleBoardVO, new RowBounds(sampleBoardVO.getOffSet(), sampleBoardVO.getRecordCountPerPage())));
}

rowbound 객체를 넘기면 되는데 offset 값은 몇번째 부터 보여줄건지이고 getRecordCountPerPage는 몇개를 보여줄건지 이다.


***2018-09-04 offset 값에 대해 헷갈릴 소지가 있어서 다시 적는다...

offset 값은 몇번째 값까지 지난건지에 대한 값이다.

한페이지에 10개씩 보여주고 100개의 데이터가 있다고 할때 2번 페이지의 offset 값은

10이다...즉 11번 부터 가져오기 위해서 몇번째 까지 데이터를 지났는지에 대해 기입하는 것이다...

가끔 firstIndex 값을 넣기도 하는데 잘 못 된것이다.


new RowBounds(sampleBoardVO.getOffSet(), sampleBoardVO.getRecordCountPerPage())


dao 단에서 mapper 를 사용했다면
//게시판 목록 조회 인터페이스
public List<SampleBoardVO> selectSampleBoardList(SampleBoardVO sampleBoardVO, RowBounds rowbounds) throws Exception;

dao 인터페이스 만으로 저렇게 받으면 된다.

mapper 인터페이스를 사용하면 구현체를 생성 안해도 자동으로 생성해서 사용되는데 생각보다 편하다.


rowbound 사용시 쿼리에서 페이징 처리가 빠져도 되는 편리성은 있지만 조회data가 많을 경우 뒤쪽을 조회를 하면 일일히
커서를 건너띄고 조회해서 1만7건의 마지막 페이지 조회시 9초가 걸린다......첫 페이지는 잘 되고..

그래서 쿼리의 select 태그에 옵션을 resultSetType="SCROLL_SENSITIVE" 혹은 값을 SCROLL_INSENSITIVE 이 값을 주면 바로 검색이 된다.


SENSITIVE 는 업데이트 반영시 바로 디비 결과 반영


INSENSITIVE 는 업데이트가 반영되도 결과를 반영 안한다.


commit 결과를 읽고 안읽고의 차이...

728x90