分页对象Page

来源:互联网 发布:centos 时区设置 编辑:程序博客网 时间:2024/06/07 03:56
import java.io.Serializable;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;/** * 分页信息 第一页从1开始 *  */public class Page<T> implements Serializable, Iterable<T> {protected List<T> result;protected int pageSize=10;protected int pageNumber=1;/** * 总记录数 */protected long totalCount = 0;protected boolean isPagination = true;private int pageNum;//总页数private int startIndex;private int limit;public int getPageNum() {    int  totalPageNum = (int) ((totalCount % pageSize == 0) ? totalCount / pageSize : totalCount / pageSize + 1);return totalPageNum;}public Page() {}public Page(int pageNumber, int pageSize, long totalCount) {this(pageNumber, pageSize, totalCount, new ArrayList(0));}public Page(int pageNumber, int pageSize, long totalCount, List<T> result) {if (pageSize <= 0)throw new IllegalArgumentException("[pageSize] must great than zero");this.pageSize = pageSize;this.pageNumber = PageUtils.computePageNumber(pageNumber, pageSize, totalCount);this.totalCount = totalCount;setResult(result);}public void setResult(List<T> elements) {if (elements == null)throw new IllegalArgumentException("'result' must be not null");this.result = elements;}/** * 当前页包含的数据 *  * @return 当前页数据源 */public List<T> getResult() {return result;}/** * 是否是首页(第一页),第一页页码为1 *  * @return 首页标识 */public boolean isFirstPage() {return getThisPageNumber() == 1;}/** * 是否是最后一页 *  * @return 末页标识 */public boolean isLastPage() {return getThisPageNumber() >= getLastPageNumber();}/** * 是否有下一页 *  * @return 下一页标识 */public boolean isHasNextPage() {return getLastPageNumber() > getThisPageNumber();}/** * 是否有上一页 *  * @return 上一页标识 */public boolean isHasPreviousPage() {return getThisPageNumber() > 1;}/** * 获取最后一页页码,也就是总页数 *  * @return 最后一页页码 */public int getLastPageNumber() {return PageUtils.computeLastPageNumber(totalCount, pageSize);}/** * 总的数据条目数量,0表示没有数据 *  * @return 总数量 */public long getTotalCount() {return totalCount;}public void setTotalCount(long totalCount) {this.totalCount = totalCount;}/** * 获取当前页的首条数据的行编码 *  * @return 当前页的首条数据的行编码 */public int getThisPageFirstElementNumber() {return (getThisPageNumber() - 1) * getPageSize() + 1;}/** * 获取当前页的末条数据的行编码 *  * @return 当前页的末条数据的行编码 */public long getThisPageLastElementNumber() {int fullPage = getThisPageFirstElementNumber() + getPageSize() - 1;return getTotalCount() < fullPage ? getTotalCount() : fullPage;}/** * 获取下一页编码 *  * @return 下一页编码 */public int getNextPageNumber() {return getThisPageNumber() + 1;}/** * 获取上一页编码 *  * @return 上一页编码 */public int getPreviousPageNumber() {return getThisPageNumber() - 1;}/** * 每一页显示的条目数 *  * @return 每一页显示的条目数 */public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}/** * 当前页的页码 *  * @return 当前页的页码 */public int getThisPageNumber() {return pageNumber;}public void setPageNumber(int pageNumber) {this.pageNumber = pageNumber;}/** * 得到用于多页跳转的页码 *  * @return */public List<Integer> getLinkPageNumbers() {return PageUtils.generateLinkPageNumbers(getThisPageNumber(), getLastPageNumber(), 10);}/** * 得到数据库的第一条记录号 *  * @return */public int getFirstResult() {return PageUtils.getFirstResult(pageNumber, pageSize);}public Iterator<T> iterator() {return (Iterator<T>) (result == null ? Collections.emptyList().iterator() : result.iterator());}public boolean isPagination() {return isPagination;}public void setPagination(boolean isPagination) {this.isPagination = isPagination;}}

import java.util.List;public class PageUtils {private PageUtils() {}public static int getFirstResult(int pageNumber, int pageSize) {if (pageSize <= 0)throw new IllegalArgumentException("[pageSize] must great than zero");return (pageNumber - 1) * pageSize;}public static List<Integer> generateLinkPageNumbers(int currentPageNumber, int lastPageNumber, int count) {int avg = count / 2;int startPageNumber = currentPageNumber - avg;if (startPageNumber <= 0) {startPageNumber = 1;}int endPageNumber = startPageNumber + count - 1;if (endPageNumber > lastPageNumber) {endPageNumber = lastPageNumber;}if (endPageNumber - startPageNumber < count) {startPageNumber = endPageNumber - count;if (startPageNumber <= 0) {startPageNumber = 1;}}java.util.List<Integer> result = new java.util.ArrayList();for (int i = startPageNumber; i <= endPageNumber; i++) {result.add(new Integer(i));}return result;}public static int computeLastPageNumber(long totalElements, int pageSize) {int result = (int) (totalElements % pageSize == 0 ? totalElements / pageSize : totalElements / pageSize + 1);if (result <= 1)result = 1;return result;}public static int computePageNumber(int pageNumber, int pageSize, long totalElements) {if (pageNumber <= 1) {return 1;}if (Integer.MAX_VALUE == pageNumber || pageNumber > computeLastPageNumber(totalElements, pageSize)) { // last pagereturn computeLastPageNumber(totalElements, pageSize);}return pageNumber;}}


原创粉丝点击