< 페이징 처리에 필요한 변수들 >
listCount | 게시글의 총 개수 |
pageLimit | 페이지 하단에 보여질 페이징바의 최대 개수 |
boardLimit | 한 페이지에 보여질 게시글의 최대 개수 |
currentPage | 현재 페이지(사용자가 요청한 페이지) |
maxPage | 총 페이지의 개수 |
startPage | 페이지 하단에 보여질 페이징바의 시작 수 |
endPage | 페이지 하단에 보여질 페이징바의 끝 수 |
* maxPage 연산
ex) boardLimit이 10이라고 했을 때
총 개수(listCount) boardLimit(10개) maxPage(마지막페이지)
- 100개 / 10개 = 10 10번 페이지
- 102개 / 10개 = 10.2 11번 페이지
- 107개 / 10개 = 10.7 11번 페이지
- 110개 / 10개 = 11.0 11번 페이지
- 111개 / 10개 = 11.1 12번 페이지
=> 나눗셈결과(listCount/boardLimit)를 올림처리 할 경우 maxPage가 된다.
maxPage = (int)Math.ceil((double)listCount / boardLimit);
* startPage 연산 : pageLimit, currentPage에 영향을 받음
ex) pageLimit이 10이라고 했을 때
startPage : 1, 11, 21, 31, 41 => n * 10 + 1
즉, startPage = n * pageLimit + 1
currentPage / / startPage
=> 1 ~ 10 / n * 10 + 1 => n = 0 + 1
=> 11 ~ 20 / n * 10 + 1 => n = 1 + 2
=> 21 ~ 30 / n * 10 + 1 => n = 2 + 3
n = (currentPage - 1) / pageLimit
startPage = (currentPage - 1) / pageLimit * pageLimit + 1;
* endPage 연산 : startPage, pageLimit에 영향을 받음
ex) pageLimit이 10이라고 했을 때
startPage : 1 => endPage : 10
startPage : 11 => endPage : 20
startPage : 21 => endPage : 30
...
endPage = startPage + pageLimit - 1;
if(endPage > maxPage) {
endPage = maxPage;
}
* 게시판마다 계속 사용할 수 있게 메소드로 만들어서 사용
: 그때그때 달라져야 하는 변수 4개를 매개변수로 받아 PageInfo 객체를 생성해 반환하는 메소드
public static PageInfo getPageInfo(int listCount, int currentPage, int pageLimit, int boardLimit) {
int maxPage = (int)Math.ceil(((double)listCount / boardLimit));
int startPage = (currentPage - 1) / pageLimit * pageLimit + 1;
int endPage = startPage + pageLimit - 1;
if(endPage > maxPage) {
endPage = maxPage;
}
PageInfo pi = new PageInfo(listCount, currentPage, pageLimit, boardLimit,
maxPage, startPage, endPage);
return pi; // PageInfo 객체 반환
}
< MyBatis - RowBounds >
RowBounds 파라미터는 마이바티스로 하여금 특정 개수 만큼의 레코드를 건너띄게 한다. RowBounds클래스는 offset과 limit 둘다 가지는 생성자가 있다.
int offset = 100;
int limit = 25;
RowBounds rowBounds = new RowBounds(offset, limit);
> offset : 몇 개의 게시글을 건너뛰고 조회할 건지에 대한 값
> limit : boardLimit (한 페이지에 보여질 게시글의 최대 개수)
* offset 연산
ex) boardLimit이 5일 경우
offset(건너 뛸 숫자) boardLimit(조회할 숫자)
currentPage : 1 → 1 ~ 5 0 5
currentPage : 2 → 6 ~ 10 5 5
currentPage : 3 → 11 ~ 14 10 5
int offset = (pi.getCurrentPage() - 1) * pi.getBoardLimit();
RowBounds rowBounds = new RowBounds(offset, pi.getBoardLimit());
// RowBounds객체를 넘겨야 할 경우
// selectList메소드의 오버로딩된 형태 중 매개변수가 3개인 메소드를 사용
// 딱히 두 번째 매개변수 자리에 넘길 값이 없다면 null을 넘겨줌
<E> List<E> selectList (String statement, Object parameter, RowBounds rowBounds)
// 매퍼파일.sql명, sql문에 넘길 값, 생성한 RowBounds
'개발 > Framework' 카테고리의 다른 글
[Spring] 메이븐(Maven) 개념 / 사용법 (1) | 2022.12.25 |
---|---|
[MyBatis] MyBatis 동적 SQL 처리 (0) | 2022.12.19 |
[MyBatis] INSERT문 / SELECT문 + resultMap xml파일 작성법 (5) | 2022.12.18 |
[MyBatis] 기본 XML 설정 / SqlSession 생성 (4) | 2022.12.15 |
[Framework] 프레임워크 / 특징 / 장단점 / 종류 (0) | 2022.12.15 |