在上一章了解分页sql语句(1)实现后,写一个类实现分页的各个参数,函数和链接。
链接格式:总共n页 当前页是10,(1 2 ... 7 8 9 10 11 12 ... n-1 n)
Paging.java
package com.by.eshop.util.web.paging;
import java.util.ArrayList;
/**
* 约定: 页数从1开始,行数从1开始
*/
public class Paging {
public static final int DEFAULT_PAGING_SIZE = 10; // 默认每页显示行数
private int maxRowNumber = 0; // 总记录数
private int pageNumber = 1; // 第几页
private int pageSize = 10; // 默认每页显示行数
private ArrayList<String> pageList = new ArrayList<String>();
// 总记录数
public Paging(int maxRowNumber) {
if (maxRowNumber > -1) {
this.maxRowNumber = maxRowNumber;
}
this.pageSize = DEFAULT_PAGING_SIZE;
}
// 设置第几页
public void setPageNumber(int pageNumber) {
if (this.pageNumber > 0) {
this.pageNumber = pageNumber;
}
}
// 设置每页显示数
public void setPageSize(int pageSize) {
if (this.pageSize > -1) {
this.pageSize = pageSize;
}
}
// 获取该页开始记录数
public int getStartRowNumber() {
return (this.pageNumber - 1) * this.pageSize + 1;
}
// 获取该页结束记录数
public int getEndRowNumber() {
return this.getStartRowNumber() + this.pageSize - 1;
}
// 获取当前页
public int getPageNumber() {
return this.pageNumber;
}
// 获取总页数
public int getPageCount() {
return this.maxRowNumber % this.pageSize == 0 ? (this.maxRowNumber / this.pageSize) : (this.maxRowNumber / this.pageSize + 1);
}
// 判断是否有上一页
public boolean hasPreviousPaging() {
return this.pageNumber > 1;
}
// 判断是否有下一页
public boolean hasNextPaging() {
return this.pageNumber < this.getPageCount();
}
// 获取下一页
public Paging getNextPaging() {
if (!hasNextPaging()) {
return null;
}
Paging paging = new Paging(maxRowNumber); // 总记录数
paging.setPageNumber(pageNumber + 1); // 设置页数
paging.setPageSize(pageSize); // 每页记录数
return paging;
}
// 获取上一页
public Paging getPreviousPaging() {
if (!hasPreviousPaging()) {
return null;
}
Paging paging = new Paging(maxRowNumber);
paging.setPageNumber(pageNumber - 1);
paging.setPageSize(pageSize);
return paging;
}
// 首页
public Paging getFirstPaging() {
Paging paging = new Paging(maxRowNumber);
paging.setPageNumber(1);
paging.setPageSize(pageSize);
return paging;
}
// 尾页
public Paging getEndPaging() {
Paging paging = new Paging(maxRowNumber);
paging.setPageNumber(this.getPageCount());
paging.setPageSize(pageSize);
return paging;
}
// 创建页数的链表 格式如下 1 2 ... 15 16 17 ... 29 30
public void creatPageList() {
int start_end_page_count = 2;
int middle_page_count=3;
int totalPages = getPageCount(); // 总页数
if(totalPages==0)
return;
pageNumber = Math.max(1, Math.min(pageNumber,totalPages)); // 第几页
// 如果当前页不是1 加入上一页链接
if (pageNumber != 1) {
this.pageList.add("<a class='page_link' href='javascript:void(0)' id='" + String.valueOf(pageNumber - 1) + "'>上一页</a>");
}
// 如果总页数小于11就简单的显示数字链接(当前页不需要链接)
if(totalPages<=(middle_page_count+start_end_page_count)*2+1){
for(int i=1;i<=totalPages;i++)
if (i == pageNumber)
this.pageList.add("<span class='page_now'>"
+ String.valueOf(i) + "</span>");
else
this.pageList.add("<a href='javascript:void(0)' id='"
+ String.valueOf(i) + "'>" + String.valueOf(i)
+ "</a>");
}
else {
// 让开始2页和当前页之间的用...来表示 (前提是总页数大于10)
if (pageNumber - middle_page_count > start_end_page_count + 1) {
// 12 ... n-3 n-2 n-1 n
// 前部分
for (int i = 1; i <= start_end_page_count; i++)
this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
// 中间
this.pageList.add("<span class='page_dot'>...</span>");
// 后面
for (int i = pageNumber - middle_page_count; i <= pageNumber; i++) {
if (i == pageNumber)
this.pageList.add("<span class='page_now'>"+ String.valueOf(i) + "</span>");
else
this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
}
} else {
// 否则只是显示页数链接
for (int i = 1; i <= pageNumber; i++) {
if (i == pageNumber)
this.pageList.add("<span class='page_now'>"+ String.valueOf(i) + "</span>");
else
this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
}
}
//在后面的中间加入...
if (pageNumber + middle_page_count < totalPages- start_end_page_count - 1) {
// nn+1n+2...e-1e
for (int i = pageNumber + 1; i <= pageNumber+ middle_page_count; i++)
this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
this.pageList.add("<span class='page_dot'>...</span>");
for (int i = totalPages - start_end_page_count + 1; i <= totalPages; i++)
this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
} else {
for (int i = pageNumber + 1; i <= totalPages; i++)
this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
}
}
// 当前页不是尾页且总页数不是1页 加入下一页链接
if (pageNumber != totalPages && totalPages != 1) {
this.pageList.add("<a class='page_link' href='javascript:void(0)' id='" + String.valueOf(pageNumber + 1) + "'>下一页</a>");
}
}
@Override
public String toString() {
if (pageList.isEmpty()) {
creatPageList();
}
StringBuilder sbu = new StringBuilder();
for (String s : this.pageList) {
sbu.append(s).append(" ");
}
return sbu.toString();
}
public int getMaxRowNumber() {
return maxRowNumber;
}
public int getPageSize() {
return pageSize;
}
public ArrayList<String> getPageList() {
if(pageList.isEmpty()){
creatPageList();
}
return this.pageList;
}
}
分享到:
相关推荐
jquery 分页插件,代码少,兼容性好, 兼容ie5,ie6。
vue分页插件_vue.js分页插件下载
织梦首页分页插件
分页插件分页插件分页插件JAVA JSP 简单分页插件JAVA JSP 简单分页插件JAVA JSP 简单分页插件JAVA JSP 简单分页插件JAVA JSP 简单分页插件JAVA JSP 简单分页插件JAVA JSP 简单分页插件JAVA JSP 简单分页插件JAVA JSP...
javaee-SpringMVC-Mybatis 分页插件
这是pagehelper官方文档, 内容如下 1. 引入分页插件 2. 配置拦截器插件 3. 如何在代码中使用 4. MyBatis 和 Spring 集成示例
jquery ajax分页插件 jquery ajax分页插件 jquery ajax分页插件
SSH 通用分页插件 可以用以所有的数据分页 带有条件查询
jQuery分页插件设置分页内容显示数量的分页代码 jQuery分页插件设置分页内容显示数量的分页代码
jquery分页插件带总数分页代码 jquery分页插件带总数分页代码
jq分页插件
06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo...
bootstrap分页插件,亲自测过,很实用哟
Pages List: 1 | 2 | 3 | 4 Navigation Links: First | Previous | Next | Last All three behaviors work with ASP/JSP/ColdFusion when you have a Repeat Region or Horizontal Looper on the page. The ...
mybatis集成了分页的插件,采用springmvc+spring+mybatis或者springboot+mybatis的时候可以无缝对接使用
非常实用的分页插件,只需简单设置数目条数,分页数 function pageselectCallback(page_id, jq){ $('#Searchresult').text("Showing search results "+((page_id*10)+1)+"-"+((page_id*10)+10)); } $...
这是一个适配所有浏览器的js分页插件,我一直在用,简单方便轻量,重点是适配所有浏览器,适配所有浏览器,适配所有浏览器
一个好用的js分页插件,能够较快地实现分页功能。资源中包括,css,js 样例等
如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。
此jQuery插件为Ajax分页插件,一次性加载,故分页切换时无刷新与延迟,如果数据量较大不建议用此方法,因为加载会比较慢。 原插件CSS不太合理,使用浮动,故无法方便实现左右方向的定位,且未清除浮动,在中文修改...