Last active
September 7, 2015 23:12
-
-
Save arahansa/b739673e451c439af7ec to your computer and use it in GitHub Desktop.
Pagination helper for Mysql... (exception is not implemented yet)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package test; | |
import java.util.Arrays; | |
public class PagingInfo { | |
private static final int ARTICLE_PER_PAGE = 10; | |
private static final int PAGE_LIST_SIZE = 10; | |
// Spring Data Page Object variables | |
private int totalPages; // 전체 페이지 개수 | |
private int totalElements; // 전체 게시글 개수 | |
private int size; // 한 화면(페이지)에서 게시글의 개수 | |
private boolean last; // 요청 페이지가 끝 페이지인지 | |
private boolean first; // 요청페이지가 첫 페이지인지 | |
private boolean next; // 다음 구역 가능한지 | |
private boolean previous; // 이전 구역 가능한지 | |
// Custom Variables | |
private int pageListSize; // 하단의 페이지 목록 개수 | |
private int requestPage; // 요청 페이지 | |
private int beginPage; // 시작페이지 | |
private int endPage; // 끝 페이지 | |
private int firstRow; // sql 시작 로우 | |
private int endRow; // sql 끝 로우 | |
private int[] pages; // 하단 페이지 링크 배열 | |
public PagingInfo() { | |
} | |
// this constructor will assign beginPage, endPage, firstRow, endRow | |
// previous, next | |
public PagingInfo(int requestPage, int totalElements) { | |
this.requestPage = requestPage; | |
this.totalElements = totalElements; | |
paging(); | |
} | |
public void paging() { | |
this.size = this.size == 0 ? ARTICLE_PER_PAGE : this.size; | |
this.pageListSize = this.pageListSize == 0 ? PAGE_LIST_SIZE : this.pageListSize; | |
// Paging | |
totalPages = totalElements / size; | |
if ((totalElements % size) != 0) { | |
totalPages++; | |
} | |
beginPage = (requestPage - 1) / pageListSize * pageListSize + 1; | |
endPage = beginPage + (pageListSize - 1); | |
if (endPage > totalPages) { | |
endPage = totalPages; | |
} | |
firstRow = (requestPage - 1) * size; | |
endRow = firstRow + size; | |
if (endRow > totalElements) | |
endRow = totalElements; | |
endRow = endRow - firstRow; | |
this.previous = beginPage > size; | |
this.next = endPage < totalPages; | |
this.pages = new int[endPage - beginPage + 1]; | |
for (int i = 0, j = beginPage; i < pages.length; i++, j++) { | |
pages[i] = j; | |
} | |
this.first = requestPage == 1; | |
this.last = requestPage == totalPages; | |
} | |
// Builder pattern | |
public static class Builder { | |
private PagingInfo pagingInfo; | |
public Builder() { | |
pagingInfo = new PagingInfo(); | |
} | |
public Builder requestPage(int requestpage) { | |
pagingInfo.requestPage = requestpage; | |
return this; | |
} | |
public Builder totalElements(int totalElements) { | |
pagingInfo.totalElements = totalElements; | |
return this; | |
} | |
public Builder pageSize(int pageSize) { | |
pagingInfo.size = pageSize; | |
return this; | |
} | |
public Builder pageListSize(int pageListSize) { | |
pagingInfo.pageListSize = pageListSize; | |
return this; | |
} | |
public PagingInfo build() { | |
pagingInfo.paging(); | |
return pagingInfo; | |
} | |
} | |
// Getters and Setters | |
public int getTotalPages() { | |
return totalPages; | |
} | |
public void setTotalPages(int totalPages) { | |
this.totalPages = totalPages; | |
} | |
public int getTotalElements() { | |
return totalElements; | |
} | |
public void setTotalElements(int totalElements) { | |
this.totalElements = totalElements; | |
} | |
public int getSize() { | |
return size; | |
} | |
public void setSize(int size) { | |
this.size = size; | |
} | |
public boolean isLast() { | |
return last; | |
} | |
public void setLast(boolean last) { | |
this.last = last; | |
} | |
public boolean isFirst() { | |
return first; | |
} | |
public void setFirst(boolean first) { | |
this.first = first; | |
} | |
public boolean isNext() { | |
return next; | |
} | |
public void setNext(boolean next) { | |
this.next = next; | |
} | |
public boolean isPrevious() { | |
return previous; | |
} | |
public void setPrevious(boolean previous) { | |
this.previous = previous; | |
} | |
public int getRequestPage() { | |
return requestPage; | |
} | |
public void setRequestPage(int requestPage) { | |
this.requestPage = requestPage; | |
} | |
public int getBeginPage() { | |
return beginPage; | |
} | |
public void setBeginPage(int beginPage) { | |
this.beginPage = beginPage; | |
} | |
public int getEndPage() { | |
return endPage; | |
} | |
public void setEndPage(int endPage) { | |
this.endPage = endPage; | |
} | |
public int getFirstRow() { | |
return firstRow; | |
} | |
public void setFirstRow(int firstRow) { | |
this.firstRow = firstRow; | |
} | |
public int getEndRow() { | |
return endRow; | |
} | |
public void setEndRow(int endRow) { | |
this.endRow = endRow; | |
} | |
public int[] getPages() { | |
return pages; | |
} | |
public void setPages(int[] pages) { | |
this.pages = pages; | |
} | |
@Override | |
public String toString() { | |
return "PagingInfo [totalPages=" + totalPages + ", totalElements=" + totalElements + ", size=" + size | |
+ ", last=" + last + ", first=" + first + ", next=" + next + ", previous=" + previous + ", requestPage=" | |
+ requestPage + ", beginPage=" + beginPage + ", endPage=" + endPage + ", firstRow=" + firstRow | |
+ ", endRow=" + endRow + ", pages=" + Arrays.toString(pages) + "]"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
팀원분을 위한 MYSQL 페이징 도우미..
변수명같은 것은 스프링데이터 JPA의 페이지 클래스와 비슷하게 만듦.
(추후 팀원분께서 스프링데이터의 page를 만날 때 익숙하게 사용할 수 있도록. ) 밑의 변수는 따로 몇 개 지정.
사용법은 생성자를 통해서건, 빌더를 통해서건 요청페이지와 전체 게시글 수를 넣어주면 객체가 자동으로 완성되면서 페이징정보와 Database 검색을 위한 first Row 와 endRow 를 제공함.