在上一章了解分页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;
}
}
分享到:
相关推荐
2. **引入分页插件**:将`jquery.paginate.js`添加到HTML文件中,通常放在`</body>`标签之前。 3. **应用样式**:将`jquery.paginate.css`链接到HTML的`<head>`部分,以定义分页按钮的样式。 4. **初始化插件**:在...
2. **分页插件的重要性**: 在处理大型PDF文档时,尤其是包含数百甚至数千页的文件时,手动分页不仅耗时且容易出错。Acrobat 9 分页插件的出现,解决了这一问题,用户可以通过一键操作快速对PDF文档进行分页,极大...
SSH 通用分页插件是一种在Java开发中用于处理数据分页显示的工具,尤其在基于Struts2、Spring和Hibernate(SSH)的Web应用程序中非常常见。SSH框架结合了Struts2的MVC设计模式、Spring的依赖注入以及Hibernate的对象...
本项目“javaee-SpringMVC-Mybatis 分页插件”显然是一个结合了这三个框架实现的分页功能示例。下面我们将深入探讨这些技术及其分页插件的应用。 1. **JavaEE**:JavaEE(Java Platform, Enterprise Edition)是...
2. **配置设置**:在织梦后台找到相关的配置选项,如系统设置或模块设置,输入或选择分页插件的相关参数,如每页显示条目数、分页样式等。 3. **模板调用**:在织梦首页模板文件(如index.htm)中,正确地调用插件...
Bootstrap分页插件是前端开发中常用的一种工具,它基于Twitter Bootstrap框架,为网页提供美观且功能丰富的分页导航。这个压缩包文件“bootstrap分页插件.zip”包含了一个名为“317482454-tm.pagination-195db9b”的...
本文将深入探讨“pagination”这一前端分页插件,它可以帮助开发者轻松实现具有CSS样式的分页功能。 分页插件是前端开发中的一个重要组件,它的主要作用是将大量数据分割成若干个较小的部分,每次只加载一部分数据...
Bootstrap分页插件是一种基于流行的前端框架Bootstrap设计的页面导航工具,主要用于在大量数据或内容中实现分块显示,提供用户友好的翻页体验。在Web应用中,当需要展示的数据超过一个页面所能容纳的范围时,分页就...
在Web开发中,分页插件是实现这一功能的重要工具。这里提到的是一个由个人开发者封装的简单分页插件,它可以帮助我们轻松地在网页上实现数据的分页显示。 分页的基本原理是将大数据集分割成较小、可管理的部分,...
【标题】"mybatis分页插件代码"主要涉及到MyBatis框架中的一种增强功能——分页插件的使用。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在处理大数据量时,分页查询是必不可少的优化...
本文将详细介绍一个基于jQuery编写的分页插件,以及如何利用这个插件快速实现网页的分页功能。 分页插件的核心目标是提供一种简单、易用的方式来将大量数据分割成多页,允许用户通过点击页码或导航按钮来浏览数据的...
Vue.js 提供了多种实现分页功能的方法,包括自定义组件和使用现成的分页插件。 一、Vue分页插件的基本原理 Vue分页插件的核心思想是通过计算当前页、总页数、每页显示数量等参数,动态生成分页条目,并监听用户的...
**JavaScript分页插件概述** 在网页开发中,分页是一种常见的数据展示方式,它能够有效地组织大量数据,提高用户体验。本项目提供的“适配所有浏览器的js分页插件”是一个轻量级且易用的解决方案,尤其适用于那些...
Java分页插件是开发大型数据应用时必不可少的工具,它可以帮助我们有效地管理数据库查询,减少服务器负担,提高用户体验。本插件以简单实用为特点,适合初学者和经验丰富的开发者使用,允许用户根据自己的需求进行...
JQ的分页插件是一种高效的解决方案,它能够帮助开发者轻松实现网页内容的分页显示,提升用户体验。本资源包含了一系列必要的文件,用于演示如何使用这个插件。 首先,我们来看`pagination.css`文件,这是一个CSS...
06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo...
"简单分页插件"是一个针对JavaScript(js)设计的小巧实用的工具,用于帮助开发者轻松实现网页的分页功能。下面将详细阐述这个插件的工作原理、使用方法以及可能涉及到的技术点。 首先,`myPagination.css`是这个...
本文将详细介绍标题为“15个精美的jq分页插件”的内容,这些插件都是基于jQuery库开发的,具有美观、易用的特点,适合各种类型的网站应用。 首先,jQuery是一个广泛使用的JavaScript库,它简化了HTML文档遍历、事件...
为了提高代码的可维护性和可移植性,我们可以通过编写自定义分页插件来实现更灵活的分页逻辑。本文将详细介绍如何在 MyBatis 中实现自定义分页插件。 自定义分页插件提供了一种灵活且高效的方式来实现 MyBatis 的...
1. **配置插件**:在Struts2的配置文件中,我们需要引入分页插件的相关配置,这通常涉及拦截器、结果类型和插件类等设置。 2. **模型层**:在业务模型中,需要定义一个Page对象,它包含了当前页码、每页显示条数、...