Skip to content

Instantly share code, notes, and snippets.

@arahansa
Last active September 7, 2015 23:12
Show Gist options
  • Save arahansa/b739673e451c439af7ec to your computer and use it in GitHub Desktop.
Save arahansa/b739673e451c439af7ec to your computer and use it in GitHub Desktop.
Pagination helper for Mysql... (exception is not implemented yet)
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) + "]";
}
}
@arahansa
Copy link
Author

arahansa commented Sep 7, 2015

팀원분을 위한 MYSQL 페이징 도우미..

변수명같은 것은 스프링데이터 JPA의 페이지 클래스와 비슷하게 만듦.
(추후 팀원분께서 스프링데이터의 page를 만날 때 익숙하게 사용할 수 있도록. ) 밑의 변수는 따로 몇 개 지정.

사용법은 생성자를 통해서건, 빌더를 통해서건 요청페이지와 전체 게시글 수를 넣어주면 객체가 자동으로 완성되면서 페이징정보와 Database 검색을 위한 first Row 와 endRow 를 제공함.

변수명
totalPages 전체 페이지 개수
totalElements 전체 게시글 개수
size 한 화면(페이지)에서 게시글의 개수
last 요청 페이지가 끝 페이지인가
first 요청 페이지가 첫 페이지인가
next 하단의 페이지 목록에서 다음 구역이 가능한가
previous 하단의 페이지 목록에서 이전 구역이 가능한가
커스텀 ===
pageListSize 하단의 페이지 목록 개수
requestPage 요청페이지
beginPage 시작페이지
endPage 끝 페이지
firstRow sql 시작 로우
endRow sql 끝 로우
pages 하단 페이지 링크 배열

test image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment