JAVA分页工具类
最近写了一个代码生成工具,分享下该工具下的分页工具
一、分页工具类
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分页工具类的更多相关文章
- PageUtil.java分页工具类
package com.chabansheng.util; /** * 分页工具类 * @author Administrator * */ public class PageUtil { /** * ...
- JAVA 分页工具类及其使用
Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...
- java 分页工具类
//13年写的,今天(17)拷贝到博客园 package com.sicdt.sicsign.web.utils; import java.io.Serializable; import java.u ...
- 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解
[博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...
- [转]Java常用工具类集合
转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...
- 项目经验分享——Java常用工具类集合 转
http://blog.csdn.net/xyw591238/article/details/51678525 写在前面 本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数 ...
- Java常用工具类之数据库操作辅助类DBUtil.java
package com.qushida.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.be ...
- Java Properties工具类详解
1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...
- Java json工具类,jackson工具类,ObjectMapper工具类
Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...
随机推荐
- fork()和vfork()的区别(转载)
fork和vfork 转载 http://coolshell.cn/articles/12103.html 在知乎上,有个人问了这样的一个问题--为什么vfork的子进程里用return,整个程序会挂 ...
- 将fasta fastq文件线性化处理
将fasta文件线性化处理 awk '/^>/ {printf("%s%s\t",(N>0?"\n":""),$0);N++;n ...
- 【K8S】helm chart多环境部署最佳实践-示例
Chart.yaml apiVersion: v1 appVersion: "1.0" description: A Helm chart for Kubernetes name: ...
- es 内存占用优化
对6.3: 修改Elasticsearch中JVM配置文件jvm.options: Dlog4j2.enable.threadlocals=false 注: 本文主要针对ES 2.x. “该给ES分配 ...
- centos中更新glibc库文件到2.17
1 确保安装过gcc yum install gcc 2 获取glibc相关版本 wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.17.tar.xz 3 解 ...
- 第四节:EF Core的并发处理
1.说明 和EF版本的并发处理方案一致,需要知道乐观并发和悲观并发的区别,EF Core只支持乐观并发:监控并发的两种方案:监测单个字段和监测整条数据,DataAnnotations 和 Fluent ...
- Mysql 学习参考
[1]Mysql 基础知识 (1)<Mysql 官网> (2)<菜鸟教程之Mysql数据库教程> (3)<C语言中文网之Mysql数据库栏> (4)<W3Sc ...
- DDR3(4):读控制
写控制完成后开始设计读控制,写控制和读控制是非常相似的. 一.总线详解 由 User Guide 可知各信号之间的逻辑关系,读数据是在给出命令之后一段时间后开始出现的.图中没有给出app_rd_dat ...
- 基于百度地图JavaScript API,员工住址统计
公司一般都有通讯和住址的统计,但是文字化的表格根本就不知道住在哪. 用百度地图就可以轻松解决, 而且公司还经常人员变动,读取excel中的内容,就不用每次还要更改地图文件了. 在遇到需要聚餐在地图中标 ...
- Echarts 学习系列(1)-5分钟上手ECharts
目录 写在前面 下载Echarts和主题 绘制一个简单的图表 写在前面 最近,在做某个项目的时候.需要使用的可视化的图表显数据.最后,选择了百度的Echarts. 下载Echarts和主题 1.获取E ...