Skip to content

Instantly share code, notes, and snippets.

@fandean
Last active September 9, 2018 02:26
Show Gist options
  • Save fandean/0c05317d563de1772affc64fa1f2c9c4 to your computer and use it in GitHub Desktop.
Save fandean/0c05317d563de1772affc64fa1f2c9c4 to your computer and use it in GitHub Desktop.
动态分页使用到的工具类MyPageUtils和相关PageInfo
import java.util.Arrays;
/**
* 动态分页的工具类
* 作用:获取分页需要使用到的元数据
*/
public class MyPageUtils {
/**
* 计算分页时limit条件的index值
* limit index , size
* @param currentPageNo 当前是第几页
* @param pageSize 每页显示多少条
* @return 分页时limit的index值
*/
public static int calcSqlLimitIndex(int currentPageNo, int pageSize){
return (currentPageNo - 1) * pageSize;
}
/**
* 总共需要显示多少页面,分页总量 totalPage
* @param totalCount 数据总量
* @param pageSize 每页显示多少条
* @return totalPage 分页总量
*/
public static int calcTotalPage(int totalCount, int pageSize){
return totalCount/ pageSize + (totalCount% pageSize == 0 ? 0 : 1);
}
/**
* 计算动态分页的开始页面和结束页面
* @param currentPageNo 当前页码
* @param totalPage 总共有多少页
* @param pagingNavSize 分页导航条的大小
* @return int[0]:开始页码; int[1]:结束页面
*/
public static int[] pagination(int currentPageNo, int totalPage, int pagingNavSize) {
//初始化开始页为1
int start = 1;
//初始化结束页为总页数
int end = totalPage;
/*
如果总页数超过pagingNavSize,需要计算开始页和结束页
先计算出 start 值,再让 start 和 end 相互约束
*/
if (totalPage > pagingNavSize){
// 计算 start
int startThreshold = currentPageNo - (pagingNavSize / 2);
start = startThreshold > 0 ? startThreshold : 1;
//
end = start + pagingNavSize - 1;
if (end > totalPage){
end = totalPage;
start = end - pagingNavSize + 1;
}
// 思路不好
//头部约束 (start>1)
// 并且当前页数值大于 currentPageNo > pagingNavSize / 2 + 1
// int startThreshold = currentPageNo - (pagingNavSize / 2 - 1);
//尾部约束 (end < totalPage )
// end 的计算方法,取模用于处理 pagingNavSize 奇偶问题
// int endThreshold = currentPageNo + (pagingNavSize/2 - (pagingNavSize%2==0?1:0));
// 并且 end 小于 totalPage
}
return new int[]{start, end};
}
public static void main(String[] args) {
int[] pagination = pagination(6, 11,7);
System.out.println(Arrays.toString(pagination));
}
}
import java.util.List;
/**
* 用于封装分页需要使用到的元数据 和 当前分页页面需要显示的业务数据
* @param <T> 当前页需要的数据类型
*/
public class PageInfo<T> {
/**
* 当前页面
*/
private Integer currentpPageNo;
/**
* 每页显示的数据量
*/
private Integer pageSize;
/**
* 总数据量
*/
private Integer totalCount;
/**
* 总页数
*/
private Integer totalPage;
/**
* 分页导航条的大小
*/
private Integer pagingNavSize;
/**
* 动态分页时,分页导航条的起始值
*/
private Integer start;
/**
* 动态分页时,分页导航条的结束值
*/
private Integer end;
/**
* 当前分页页面需要显示的业务数据
*/
private List<T> data;
public Integer getCurrentpPageNo() {
return currentpPageNo;
}
public void setCurrentpPageNo(Integer currentpPageNo) {
this.currentpPageNo = currentpPageNo;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalCount() {
return totalCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public Integer getPagingNavSize() {
return pagingNavSize;
}
public void setPagingNavSize(Integer pagingNavSize) {
this.pagingNavSize = pagingNavSize;
}
public Integer getStart() {
return start;
}
public void setStart(Integer start) {
this.start = start;
}
public Integer getEnd() {
return end;
}
public void setEnd(Integer end) {
this.end = end;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
}
@fandean
Copy link
Author

fandean commented Sep 9, 2018

更改封装数据类名 ,将 PageBean 改为 PageInfo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment