
게시물이 너무 많을 때 페이지 별로 나눠놓고, 페이지 네비게이션을 통해 게시물을 편리하게 볼 수 있도록 하는 것

테이블에 들어있는 데이터를 페이지별로 가져오려면 SELECT문의 LIMIT이라는 구문을 사용해야 한다.
offset이란, 처음부터 빨간 네모까지 얼마나 떨어져 있는가? 이고
row_count는 읽어올 row의 수 이다.
첫 번째 페이지의 offset은 0
두 번째 페이지의 offset은 10..
offset을 만드는 방법이 어려우므로,
일단 page-1을 해보면 page보다 하나씩 줄어드는 것을 알 수 있다.
거기다가 *10을 하면 offset을 계산할 수 있다.
<java />
package com.fastcampus.ch4.domain;
public class PageHandler {
int totalCnt; //총 게시물 개수
int pageSize; //한 페이지의 크기
int naviSize=10; //페이지 네비게이션의 크기
int totalPage; //전체 페이지의 갯수
int page; //현재 페이지
int beginPage; //네비게이션의 첫번째 페이지
int endPage; // 네비게이션의 마지막 페이지
boolean showPrev; //이전 페이지로 이동하는 링크를 보여줄 것인지의 여부
boolean showNext; //다음 페이지로 이동하는 링크를 보여줄 것인지의 여부
public PageHandler(int totalCnt,int page){ //2개의 변수만 줬을 때에는, pageSize를 10으로 준다
this(totalCnt,page,10);
}
public PageHandler(int totalCnt,int page, int pageSize){ //페이징 계산하는데 필요한 변수3개로 생성자 만들기
this.totalCnt=totalCnt;
this.page=page;
this.pageSize=pageSize;
totalPage = (int)Math.ceil(totalCnt/pageSize); //Math.ceil=올림, double로 나오므로 int화
beginPage = page/naviSize*naviSize+1; //일의 자릿수를 버리기
endPage = Math.min(beginPage + naviSize -1 ,totalPage);
showPrev=beginPage!=1; //beginPage가 1만 아니면 된다.(1만 아니면 이전으로 가는 버튼을 보여준다)
showNext=endPage!=totalPage;
}
void print(){
System.out.println("page = "+page);
System.out.print(showPrev ? "[PREV]" : "");
for (int i = beginPage; i <= endPage; i++) {
System.out.print(i+" ");
}
System.out.println(showNext? "[NEXT]" : "");
}
@Override
public String toString() {
return "PageHandler{" +
"totalCnt=" + totalCnt +
", pageSize=" + pageSize +
", naviSize=" + naviSize +
", totalPage=" + totalPage +
", page=" + page +
", beginPage=" + beginPage +
", endPage=" + endPage +
", showPrev=" + showPrev +
", showNext=" + showNext +
'}';
}
}
Test를 만든다
<code />
package com.fastcampus.ch4.domain;
import org.junit.Test;
import static org.junit.Assert.*;
public class PageHandlerTest {
@Test
public void test(){
PageHandler ph = new PageHandler(250,11);
ph.print();
System.out.println("ph = "+ph);
assertTrue(ph.beginPage==11);
assertTrue(ph.endPage==20);
}
}

<code />
@Test
public void test3(){
PageHandler ph = new PageHandler(255,25);
ph.print();
System.out.println("ph = "+ph);
assertTrue(ph.beginPage==21);
assertTrue(ph.endPage==26);
}

'패캠 챌린지' 카테고리의 다른 글
게시판 CRUD 기능 구현_읽기, 삭제 (0) | 2023.06.05 |
---|---|
게시판 목록 만들기와 페이징 - TDD(2) (1) | 2023.05.24 |
MaBatis로 DAO작성하기 (0) | 2023.05.11 |
MyBatis (0) | 2023.04.28 |
서비스계층(Layer)의분리, Transactional (0) | 2023.04.05 |