Burninghering's Blog
article thumbnail

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

 

테이블에 들어있는 데이터를 페이지별로 가져오려면 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); }

profile

Burninghering's Blog

@개발자 김혜린

안녕하세요! 반갑습니다.