分页代码

自己写分页的代码

package com.asam.buz.common.core.dao.primitive;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.lang3.StringUtils;

/**

 * 分页工具

 */

//这个<T>就是一个不确定的泛型,T相当于一个泛型变量

public class Page<T> {

/**

 * 升序

 */

public static final String ASC = "asc";

/**

 * 降序

 */

public static final String DESC = "desc";

/**

 * 页大小

 */

//每页的数据条数,默认为-1

protected int pageSize = -1;

/**

 * 当前页

 */

protected int currentPage = 1;

/**

 * 总记录数

 */

protected long countRecord = -1;

/**

 * 总页数

 */

protected long totalPages;

/**

 * 排序字段

 */

protected String order = null;

/**

 * 升降序

 */

protected String orderBy = null;

/**

 * 是否先执行统计总条数

 */

protected boolean autoCount = true;

/**

 * 分页结果

 */

//分页结果就是直接调用page的类的时候,就直接将查询的结果(list类型)放入到page类当中,然后返回给前端,同时返回的数据还有跟多,如总记录条数,当前页,每页的数据条数,等等

protected List<T> list = new ArrayList<T>();

/**

 * 构造

 */

//空的构造函数

public Page() {

}

/**

 * 构造

 *

 * @param pageSize

 *            页大小

 */

//当为首页时,没有当前页数时的构造函数

public Page(int pageSize) {

this.pageSize = pageSize;

}

/**

 * 构造

 *

 * @param pageSize

 *            页大小

 * @param currentPage

 *            当前页

 */

//同时传入参数当前页和每页数据数的构造函数

public Page(int pageSize, int currentPage) {

this.pageSize = pageSize;

this.currentPage = currentPage;

}

/**

 * 获得当前页的页号,序号从1开始,默认为1

 *

 * @return int 当前页

 */

public int getCurrentPage() {

return currentPage;

}

/**

 * 设置当前页的页号,序号从1开始,低于1时自动调整为1

 *

 * @param currentPage

 *            int 当前页

 */

//当前页如果为-1(默认),则说明是没有传入currentPage的参数,所以是首页,将值设置成1

public void setCurrentPage(final int currentPage) {

this.currentPage = currentPage;

if (currentPage < 1) {

this.currentPage = 1;

}

}

/**

 * 返回Page对象自身的setCurrentPage函数,可用于连续设置

 *

 * @param currentPage

 *            int 当前页

 * @param Page

 *            <T> 分页自身

 */

//搞不清楚

public Page<T> currentPage(final int currentPage) {

setCurrentPage(currentPage);

return this;

}

/**

 * 获得每页的记录数量, 默认为-1

 *

 * @return int 页大小

 */

public int getPageSize() {

return pageSize;

}

/**

 * 设置每页的记录数量

 *

 * @param pageSize

 *            int 页大小

 */

public void setPageSize(final int pageSize) {

this.pageSize = pageSize;

}

/**

 * 返回Page对象自身的setPageSize函数,可用于连续设置

 *

 * @param thePageSize

 *            int 页大小

 * @return Page<T> 分页自身

 */

public Page<T> pageSize(final int thePageSize) {

setPageSize(thePageSize);

return this;

}

/**

 * 根据pageNopageSize计算当前页第一条记录在总结果集中的位置,序号从1开始

 *

 * @return int 开始记录

 */

public int getFirst() {

int minRecord = ((getCurrentPage() - 1) * getPageSize()) + 1;

return minRecord;

}

/**

 * 获得排序字段,无默认值. 多个排序字段时用','分隔

 *

 * @return String 排序字段

 */

public String getOrderBy() {

return orderBy;

}

/**

 * 设置排序字段,多个排序字段时用','分隔

 *

 * @param orderBy

 *            String 排序字段

 */

public void setOrderBy(final String orderBy) {

this.orderBy = orderBy;

}

/**

 * 返回Page对象自身的setOrderBy函数,可用于连续设置

 *

 * @param theOrderBy

 *            String 排序字段,多个排序字段时用','分隔

 * @return Page<T> 分页自身

 */

public Page<T> orderBy(final String theOrderBy) {

setOrderBy(theOrderBy);

return this;

}

/**

 * 获得排序方向, 无默认值

 *

 * @return String 排序方向

 */

public String getOrder() {

return order;

}

/**

 * 设置排序方式方向

 *

 * @param order

 *            String 可选值为descasc,多个排序字段时用','分隔

 */

public void setOrder(final String order) {

String lowcaseOrder = StringUtils.lowerCase(order);

// 检查order字符串的合法值

String[] orders = StringUtils.split(lowcaseOrder, ',');

for (String orderStr : orders) {

if (!StringUtils.equals(DESC, orderStr)

&& !StringUtils.equals(ASC, orderStr)) {

throw new IllegalArgumentException("排序方向" + orderStr + "不是合法值");

}

}

this.order = lowcaseOrder;

}

/**

 * 返回Page对象自身的setOrder函数,可用于连续设置

 *

 * @param theOrder

 *            String 可选值为descasc,多个排序字段时用','分隔

 * @return Page<T> 分页自身

 */

public Page<T> order(final String theOrder) {

setOrder(theOrder);

return this;

}

/**

 * 是否已设置排序字段,无默认值

 *

 * @return boolean 是否已设置排序字段

 */

public boolean isOrderBySetted() {

return (StringUtils.isNotBlank(orderBy) && StringUtils

.isNotBlank(order));

}

/**

 * 获得查询对象时是否先自动执行count查询获取总记录数, 默认为true

 *

 * @return boolean 是否先自动执行count查询获取总记录数

 */

public boolean isAutoCount() {

return autoCount;

}

/**

 * 设置查询对象时是否自动先执行count查询获取总记录数

 *

 * @param autoCount

 *            boolean 是否先执行count查询

 */

public void setAutoCount(final boolean autoCount) {

this.autoCount = autoCount;

}

/**

 * 返回Page对象自身的setAutoCount函数,可用于连续设置

 *

 * @param theAutoCount

 *            boolean 是否先执行count查询

 * @return Page<T> 分页自身

 */

public Page<T> autoCount(final boolean theAutoCount) {

setAutoCount(theAutoCount);

return this;

}

/**

 * 获得总记录数, 默认值为-1

 *

 * @return long 总记录数

 */

public long getCountRecord() {

return this.countRecord;

}

/**

 * 获得总记录数, 默认值为-1(EcTable设计,EcTable要求总记录数为Int类型)

 *

 * @return int 总记录数

 */

public int getCountRecordToEcTable() {

return new Long(this.countRecord).intValue();

}

/**

 * 设置总记录数.

 *

 * @param countRecord

 *            long 总记录数

 */

public void setCountRecord(final long countRecord) {

this.countRecord = countRecord;

this.totalPages = (countRecord - 1) / this.pageSize + 1;// 设置总页数

}

/**

 * 根据页大小与总记录数计算总页数, 默认值为-1

 *

 * @return long 总页数

 */

public long getCountPage() {

if (getCountRecord() < 0) {

return -1;

}

return getCountRecord() / getPageSize()

+ (getCountRecord() % getPageSize() == 0 ? 0 : 1);

}

/**

 * 是否还有下一页

 *

 * @return boolean 是否有下页

 */

public boolean isHasNext() {

return (getCurrentPage() + 1 <= getCountPage());

}

/**

 * 取得下页的页号, 序号从1开始 当前页为尾页时仍返回尾页序号

 *

 * @return int 下页序号

 */

public int getNextPage() {

if (isHasNext()) {

return getCurrentPage() + 1;

} else {

return getCurrentPage();

}

}

/**

 * 是否还有上一页

 *

 * @return boolean 是否有上页

 */

public boolean isHasPre() {

return (getCurrentPage() - 1 >= 1);

}

/**

 * 取得上页的页号, 序号从1开始 当前页为首页时返回首页序号

 *

 * @return int 得到上页序号

 */

public int getPrePage() {

if (isHasPre()) {

return getCurrentPage() - 1;

} else {

return getCurrentPage();

}

}

/**

 * 是否是首页,第一页页码为1

 *

 * @return boolean 是否是首页

 */

public boolean isFirstPage() {

return getCurrentPage() <= 1;

}

/**

 * 是否为末页

 *

 * @return boolean 是否为末页

 */

public boolean isLastPage() {

return currentPage >= getCountPage();

}

/**

 * 获得页内的记录列表.

 *

 * @return List<T> 记录对象

 */

public List<T> getList() {

return list;

}

/**

 * 设置页内的记录列表.

 *

 * @param resultList

 *            List<T> 记录列表

 */

public void setList(List<T> list) {

this.list = list;

}

/**

 * 获取总页数

 *

 * @return

 */

public long getTotalPages() {

return totalPages;

}

/**

 * 设置总页数

 *

 * @param totalPages

 */

public void setTotalPages(long totalPages) {

this.totalPages = totalPages;

}

}

猜你喜欢

转载自blog.csdn.net/ww598260073/article/details/74909969
今日推荐