抽象编程(Pagination)

    一个好的分页抽象模板类。

  1 /**
  2  * 
  3  */
  4 package com.alifi.scout.common.model;
  5 
  6 import java.io.Serializable;
  7 import java.util.ArrayList;
  8 import java.util.List;
  9 
 10 public class Pagination<E> implements Serializable {
 11 
 12     /**
 13      * 
 14      */
 15     private static final long serialVersionUID  = -7438949134440092123L;
 16 
 17     /** 默认每页行数 */
 18     public static final int   DEFAULT_PAGE_SIZE = 10;
 19 
 20     /** 当前页 */
 21     private int               curPage           = 0;
 22 
 23     /** 每页数量大小 */
 24     private int               pageSize          = DEFAULT_PAGE_SIZE;
 25 
 26     /** 总数 */
 27     private int               total             = 0;
 28 
 29     /** 总页数 */
 30     private int               totalPage         = 0;
 31 
 32     /** 数据 */
 33     private List<E>           data              = new ArrayList<E>();
 34 
 35     /**
 36      * 构造函数
 37      * 
 38      * @param page 请求的页码
 39      */
 40     public Pagination(int page) {
 41         this(page, DEFAULT_PAGE_SIZE);
 42     }
 43 
 44     /**
 45      * 构造函数
 46      * 
 47      * @param pageNo 请求的页码
 48      * @param pageSize 每页数量
 49      */
 50     public Pagination(int pageNo, int pageSize) {
 51         // 传入的页码如果小于1则默认从第一页开始
 52         this.curPage = pageNo < 1 ? 1 : pageNo;
 53         // 传入的每页数量如果小于1则取默认的每页数量
 54         this.pageSize = pageSize < 1 ? DEFAULT_PAGE_SIZE : pageSize;
 55     }
 56 
 57     /**
 58      * 如果需要内存式分页才调用此方法,否则请使用setData
 59      * 
 60      * @param records
 61      */
 62     public void setRecordsForPaging(List<E> records) {
 63         if (records != null && !records.isEmpty()) {
 64             setTotal(records.size());
 65             int start = getStart();
 66             if (total > start) {
 67                 // 正常情况下size都大于start
 68                 int end = start + getCount();
 69                 if (total >= end) {
 70                     // 数据满足请求页码
 71                     setData(records.subList(start, end));
 72                 } else {
 73                     // 不满足最后一页
 74                     setData(records.subList(start, total));
 75                 }
 76             }
 77         }
 78     }
 79 
 80     public int getCurPage() {
 81         return curPage;
 82     }
 83 
 84     public int getPageSize() {
 85         return pageSize;
 86     }
 87 
 88     public int getTotal() {
 89         return total;
 90     }
 91 
 92     public final void setTotal(int total) {
 93         this.total = total;
 94         totalPage = (total % pageSize == 0) ? (total / pageSize) : (total / pageSize + 1);
 95     }
 96 
 97     /**
 98      * @return 总页数
 99      */
100     public int getTotalPage() {
101         return totalPage;
102     }
103 
104     public List<E> getData() {
105         return data;
106     }
107 
108     public void setData(List<E> data) {
109         this.data = data;
110     }
111 
112     /**
113      * 得到本页开始行号
114      * 
115      * @return
116      */
117     public int getStart() {
118         return (curPage - 1) * pageSize;
119     }
120 
121     /**
122      * @return 每页数量大小
123      */
124     public int getCount() {
125         return pageSize;
126     }
127 
128     /**
129      * @return 本页最后一行 行号
130      */
131     public int getEnd() {
132         return this.getStart() + this.getPageSize();
133     }
134 
135     /**
136      * @return 是否有下一页
137      */
138     public boolean hasNext() {
139         return curPage < totalPage;
140     }
141 
142     public int getNextPage(){
143         return curPage+1;
144     }
145     /**
146      * @return 是否由上一页
147      */
148     public boolean hasProx() {
149         return curPage > 1;
150     }
151 
152     public boolean isFirstPage(){
153         return curPage ==1;
154     }
155     public boolean isLastPage(){
156         if(totalPage <= 1){
157             return true;
158         }
159         return curPage == totalPage;
160     }
161     @Override
162     public String toString() {
163         StringBuilder sb = new StringBuilder();
164         sb.append("curPage:").append(curPage).append(",pageSize:").append(pageSize).append(
165                 ",total:").append(total).append(",data:").append(data);
166         return sb.toString();
167     }
168     /**
169      * 分页偏移量
170      * @return
171      */
172     public int getOffset() {
173         return (this.curPage - 1) * this.pageSize;
174     }
175 }

 一个实例:

抽象编程(Pagination)_第1张图片

    每页pageSize为30,pageNo为2,总共的数量是35条。30<35<=70,所以显示的应该为31,32,33,34,35总共5条数据。

你可能感兴趣的:(抽象编程(Pagination))