最近写了一个代码生成工具,分享下该工具下的分页工具

一、分页工具类

package com.qy.code.api.page;

import java.io.Serializable;
import java.util.List; /**
* @author shizhenwei
*
* @param <T>用于向前台返还List所用
*/
public class PageInfo<T> implements Serializable { private static final long serialVersionUID = 1L; /**
* 当前页码数
*/
private int pageNum;
/**
* 每页显示的记录数
*/
private int pageSize;
/**
* 开始行号
*/
private long startRow;
/**
* 结束行号
*/
private long endRow;
/**
* 总记录数
*/
private long rows;
/**
* 总页码数
*/
private int pages;
/**
* 导航条 页码数
*/
private int navigatePages;
/**
* 导航条 具体页码数
*/
private int[] navigatePageNums;
/**
* 导航条上的开始页
*/
private int navigateStartPage;
/**
* 导航条上的结束页
*/
private int navigateEndPage;
/**
* 首页页码
*/
private int firstPage;
/**
* 上一页页码
*/
private int previousPage;
/**
* 下一页页码
*/
private int nextPage;
/**
* 尾页页码
*/
private int lastPage;
/**
* 是否有上一页
*/
private boolean hasPreviousPage = false;
/**
* 是否有下一页
*/
private boolean hasNextPage = false;
/**
* 是否为首页
*/
private boolean isFirstPage = false;
/**
* 是否为最后一页
*/
private boolean isLastPage = false; // 存放本次分页查询出来的数据
private List<T> list; /**
* @param pageNum
* @param pageSize
* @param rows
* @param navigatePages
*/
public PageInfo(List<T> list) {
if (list instanceof PageList) {
PageList<T> pageList = (PageList<T>)list;
// 当前页码
this.pageNum = pageList.getPageNum();
// 每页显示的记录数
this.pageSize = pageList.getPageSize();
// 总记录数
this.rows = pageList.getRows();
// 导航条 页码数
this.navigatePages = pageList.getNavigatePages();
// 总页码数
this.pages = (int) Math.ceil(this.rows * 1.0 / this.pageSize);
// 当前页码大于总页码数时,当前页码=总页码数
if (this.pageNum > this.pages) {
this.pageNum = this.pages;
}
// 开始行号
this.startRow = (this.pageNum * this.pageSize)-(this.pageSize-1);
// 结束行号
this.endRow = this.pageNum * this.pageSize;
//当结束行号>总行数时,结束行号=总行数
if(this.endRow > rows) {
this.endRow = rows;
}
// 导航条 开始页码和结束页码
this.navigateStartPage = (this.pageNum - this.navigatePages / 2) > 0 ? (this.pageNum - this.navigatePages / 2) : 1;
this.navigateEndPage = this.navigateStartPage+this.navigatePages;
if(this.navigateEndPage>this.pages){
this.navigateEndPage = this.pages;
if(this.navigateEndPage>this.navigatePages){
this.navigateStartPage = this.navigateEndPage-this.navigatePages+1;
}
}
//导航条具体页数
this.navigatePageNums = new int[this.navigatePages];
for(int i=this.navigateStartPage; i<=this.navigateEndPage; i++){
this.navigatePageNums[i-this.navigateStartPage] = i;
} //设置首页
this.firstPage = 1;
//设置尾页
this.lastPage = this.pages;
//是否为第一页
this.isFirstPage = this.pageNum==this.firstPage;
//是否为最后一页
this.isLastPage = this.pageNum==this.lastPage;
// 设置上一页
if (this.pageNum > 1) {
this.hasPreviousPage = true;
this.previousPage = this.pageNum - 1;
}
// 设置下一页
if (this.pageNum < this.pages) {
this.hasNextPage = true;
this.nextPage = this.pageNum + 1;
}
}
} public int getPageNum() {
return pageNum;
} public void setPageNum(int pageNum) {
this.pageNum = pageNum;
} public int getPageSize() {
return pageSize;
} public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} public long getStartRow() {
return startRow;
} public void setStartRow(long startRow) {
this.startRow = startRow;
} public long getEndRow() {
return endRow;
} public void setEndRow(long endRow) {
this.endRow = endRow;
} public long getRows() {
return rows;
} public void setRows(long rows) {
this.rows = rows;
} public int getPages() {
return pages;
} public void setPages(int pages) {
this.pages = pages;
} public int getNavigatePages() {
return navigatePages;
} public void setNavigatePages(int navigatePages) {
this.navigatePages = navigatePages;
} public int[] getNavigatePageNums() {
return navigatePageNums;
} public void setNavigatePageNums(int[] navigatePageNums) {
this.navigatePageNums = navigatePageNums;
} public int getNavigateStartPage() {
return navigateStartPage;
} public void setNavigateStartPage(int navigateStartPage) {
this.navigateStartPage = navigateStartPage;
} public int getNavigateEndPage() {
return navigateEndPage;
} public void setNavigateEndPage(int navigateEndPage) {
this.navigateEndPage = navigateEndPage;
} public int getFirstPage() {
return firstPage;
} public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
} public int getPreviousPage() {
return previousPage;
} public void setPreviousPage(int previousPage) {
this.previousPage = previousPage;
} public int getNextPage() {
return nextPage;
} public void setNextPage(int nextPage) {
this.nextPage = nextPage;
} public int getLastPage() {
return lastPage;
} public void setLastPage(int lastPage) {
this.lastPage = lastPage;
} public boolean isHasPreviousPage() {
return hasPreviousPage;
} public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
} public boolean isHasNextPage() {
return hasNextPage;
} public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
} public boolean isFirstPage() {
return isFirstPage;
} public void setFirstPage(boolean isFirstPage) {
this.isFirstPage = isFirstPage;
} public boolean isLastPage() {
return isLastPage;
} public void setLastPage(boolean isLastPage) {
this.isLastPage = isLastPage;
} public List<T> getList() {
return list;
} public void setList(List<T> list) {
this.list = list;
} public static long getSerialversionuid() {
return serialVersionUID;
} }

二、分页集合LIST

package com.qy.code.api.page;

import java.util.ArrayList;

/**
* 描述:分页结果集
* @author 七脉
*/
public class PageList<E> extends ArrayList<E> { private static final long serialVersionUID = 8172768353827243795L; /**
* 页码
*/
private int pageNum; /**
* 每页记录数
*/
private int pageSize;
/**
* 总共记录数
*/
private int rows;
/**
* 分页下标
*/
private int limitIndex;
/**
* 导航条固定显示多少页
*/
private int navigatePages; public PageList(int pageNum, int pageSize, int rows) {
super();
this.pageNum = pageNum;
this.pageSize = pageSize;
this.rows = rows;
} public PageList(int pageNum, int pageSize, int rows, int navigatePages) {
super();
this.pageNum = pageNum;
this.pageSize = pageSize;
this.rows = rows;
this.limitIndex = (this.pageNum * this.pageSize)-(this.pageSize-1);
this.navigatePages = navigatePages;
} public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getNavigatePages() {
return navigatePages;
}
public void setNavigatePages(int navigatePages) {
this.navigatePages = navigatePages;
} public int getLimitIndex() {
return limitIndex;
} public void setLimitIndex(int limitIndex) {
this.limitIndex = limitIndex;
} }

三、ModelAndResult对象

  可以设置为@ResponseBody全局响应对象

  也可以配合前台自带分页工具JS使用

package com.qy.code.api.result;

import java.util.HashMap;

/**
*
* <br>类 名: ModelAndResult
* <br>描 述: 用户controller @responsebody
* <br>作 者: shizhenwei
* <br>创 建: 2017年9月6日
* <br>版 本: v1.0.0
* <br>
* <br>历 史: (版本) 作者 时间 注释
*/ public class ModelAndResult extends HashMap<String, Object> { /**
*
*/
private static final long serialVersionUID = 8884722775905868487L; /** 操作是否成功 */
public final static String SUCCESS = "success"; /** 返回数据 */
public final static String DATA = "data"; /** 返回消息 */
public final static String MESSAGE = "message"; /** 返回code */
public final static String CODE = "code"; /** 总记录(用于分页查询) **/
public final static String TOTAL = "total"; /** 返回其他信息 */
public final static String OTHERS = "others"; public ModelAndResult() {
setSuccess(true);
} public <T> ModelAndResult(T data) {
setSuccess(true);
setData(data);
} public ModelAndResult(boolean success,String message) {
setSuccess(success);
setMessage(message);
} public <T> ModelAndResult(boolean success,String message, T data) {
setSuccess(success);
setMessage(message);
setData(data);
} public <T> void setAttribute(String key, T value){
put(key, value);
} @SuppressWarnings("unchecked")
public <T> T getAttribute(String key){
return (T) get(key);
} public boolean isSuccess() {
return getAttribute(SUCCESS);
} public void setSuccess(boolean success) {
setAttribute(SUCCESS, success);
} public <T> T getData() {
return getAttribute(DATA);
} public <T> void setData(T data) {
setAttribute(DATA, data);
} public String getMessage() {
return getAttribute(MESSAGE);
} public void setMessage(String message) {
setAttribute(MESSAGE, message);
} public Long getTotal() {
return getAttribute(TOTAL);
} public void setTotal(Long total) {
setAttribute(TOTAL, total);
} public Object getOthers() {
return getAttribute(OTHERS);
} public void setOthers(Object others) {
setAttribute(OTHERS, others);
} public static String getCode() {
return CODE;
} public void setCode(Object code) {
setAttribute(CODE, code);
}
}

JAVA分页工具类的更多相关文章

  1. PageUtil.java分页工具类

    package com.chabansheng.util; /** * 分页工具类 * @author Administrator * */ public class PageUtil { /** * ...

  2. JAVA 分页工具类及其使用

    Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...

  3. java 分页工具类

    //13年写的,今天(17)拷贝到博客园 package com.sicdt.sicsign.web.utils; import java.io.Serializable; import java.u ...

  4. 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解

    [博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...

  5. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  6. 项目经验分享——Java常用工具类集合 转

    http://blog.csdn.net/xyw591238/article/details/51678525 写在前面     本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数 ...

  7. Java常用工具类之数据库操作辅助类DBUtil.java

    package com.qushida.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.be ...

  8. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  9. Java json工具类,jackson工具类,ObjectMapper工具类

    Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...

随机推荐

  1. selenium--表格和复选框的定位

    表格定位 HTML代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  2. java插入代码块

    粘贴1: 当代码写到一定程度之后,就会发现很多代码都被重复地敲了N多遍,甚至毫不夸张地说:闭着眼睛都能敲出来.大量地敲这些重复地代码,除了锻炼敲键盘的速度,基本上没有其他益处,但是长期下来会浪费很多时 ...

  3. [GXOI/GZOI2019]与或和(位运算,单调栈)

    题目链接懒得放了. 题目大意懒得写了. 省选原题哪有找不到的…… 说实话,其实这题是个大水题,被我十秒钟内口胡出来了. 首先位运算除了拆位还能干啥?以下以与为例,或是差不多的. 我们考虑有多少个子矩阵 ...

  4. kali linux 更换镜像源

    编辑sources.list文件 leafpad /etc/apt/sources.list #aliyun 阿里云 deb http://mirrors.aliyun.com/kali kali-r ...

  5. win10 将任意文件固定到开始屏幕(最佳办法)

      1.情景展示 以.bat文件文件为例,想将其固定到开始屏幕上,但是选中-->右键,却没有固定到开始屏幕选项,如何将其固定到开始屏幕上呢? 2.解决方案 选中你要固定到开始屏幕上的文件--&g ...

  6. 运维-kibana常用查询使用

    1.登录服务器地址 http://kibana.ops.xxx.com.cn/ 查询语法: 支持 AND ,  OR, && || >,<  ,=模糊 *,! 1.如查询n ...

  7. JavaScript如何实现日期的前一天后一天转变

    1.生成时间 var data =new Date(); 2.获得时间戳     什么是时间戳? 时间戳是指格林威治时间自1970年1月1日(00:00:00 GTM)至当前时间的总秒数.它也被称为U ...

  8. python入门之名称空间的查找顺序

    名称空间的查找顺序: 局部:局部 > 全局 > 内置 全局:全局 > 内置 # 内置再找不到就报错 # 函数内部使用的名字,在定义阶段已经规定死了,与你的调用位置无关 x = 111 ...

  9. excel绘制多列 其中一列作为横坐标 ; 数值拟合

    excel绘制多列,其中最左列作为横纵坐标: 选中很多列,然后,,点击菜单栏的“插入”->“图标” -->在弹出的“插入图表”对话框中选择“X Y(散点图)”,默认是条形图.  左边的列会 ...

  10. springboot yml配置文件注入值

    1.编写javabean: package com.example.springboot.bean; import org.springframework.boot.context.propertie ...