java项目中常用的分页对象Page

2023-10-31

在使用JAVA平台开发企业级应用时,常常会遇到分页的场景,而且每一个项目都有自己的分页方法。现在给出我自己总结的比较通用的分页对象,以供有需之人参考。

package cn.cgs.corejava.model.persistent;

import java.io.Serializable;
import java.util.List;

/**
 * 与前端交互的分页数据对象
 * 
 * @author 陈淦森
 * @param <E>
 * @version 1.0.1
 * @Date 2016年1月4日
 */
public class Page<E> implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4973539948210269342L;
	/**
	 * 默认页码
	 */
	public static final int DEFAULT_PAGE_NO = 1;
	/**
	 * 默认页面大小
	 */
	public static final int DEFAULT_PAGE_SIZE = 10;
	/**
	 * 默认的快速导航页码显示个数
	 */
	public static final int DEFAULT_PAGE_NAV_SIZE = 5;

	private int pageNo = DEFAULT_PAGE_NO; // 页码
	private int pageSize = DEFAULT_PAGE_SIZE; // 页面大小
	private int pageNaviSize = DEFAULT_PAGE_NAV_SIZE; // 页码快速导航显示的个数
	private int totalCount; // 总的记录数
	private List<E> resultList; // 返回的查询结果集

	public Page() {
		super();
	}

	public Page(int pageNo, int pageSize) {
		super();
		setPageNo(pageNo);
		setPageSize(pageSize);
	}

	public Page(int pageNo, int pageSize, int pageNaviSize) {
		this(pageNo, pageSize);
		setPageNaviSize(pageNaviSize);
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		if (pageNo < 1) {
			pageNo = DEFAULT_PAGE_NO;
		}
		this.pageNo = pageNo;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		if (pageSize < 1) {
			pageSize = DEFAULT_PAGE_SIZE;
		}
		this.pageSize = pageSize;
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public List<E> getResultList() {
		return resultList;
	}

	public void setResultList(List<E> resultList) {
		this.resultList = resultList;
	}

	public int getPageNaviSize() {
		return pageNaviSize;
	}

	/**
	 * 返回快速导航页码
	 * 
	 * @return
	 */
	public int[] getPageNavis() {
		// 先运算出左,右边界
		int start = 0, end = 0;
		int a = pageNaviSize / 2;
		start = pageNo - a;
		if (pageNaviSize % 2 == 0) {
			end = pageNo + a - 1;
		} else {
			end = pageNo + a;
		}
		// 分三种情况处理
		int totalPages = getTotalPage();
		int[] b = new int[pageNaviSize];
		// 左边界
		if (start < 1) {
			for (int i = 0, step = 1; i < pageNaviSize; i++, step++) {
				if (step <= totalPages) {
					b[i] = step;
				} else {
					break;
				}
			}
		} else if (end > totalPages) {	// 右边界
			for (int i = pageNaviSize - 1, step = totalPages; i >= 0; i--, step--) {
				if (step > 0) {
					b[i] = step;
				} else {
					break;
				}
			}
		} else {	// 中间
			for (int i = 0; i < pageNaviSize; i++) {
				b[i] = start++;
			}
		}
		return b;
	}

	public void setPageNaviSize(int pageNaviSize) {
		if (pageNaviSize < 1) {
			pageNaviSize = DEFAULT_PAGE_NAV_SIZE;
		}
		this.pageNaviSize = pageNaviSize;
	}

	/**
	 * 获得总的页码数量
	 * 
	 * @return
	 */
	public int getTotalPage() {
		if (totalCount % pageSize > 0) {
			return totalCount / pageSize + 1;
		} else {
			return totalCount / pageSize;
		}
	}

	/**
	 * 获取从哪一条记录开始查询
	 * 
	 * @return
	 */
	public int getFirstIndex() {
		return (pageNo - 1) * pageSize;
	}
	
	/**
	 * 获取最后一条记录的下标数(不包含)
	 * 
	 * @return
	 */
	public int getLastIndex() {
		return getFirstIndex() + pageSize;
	}

	/**
	 * 判断是否还有下一页
	 * 
	 * @return
	 */
	public boolean isHasNextPage() {
		return (pageNo + 1) <= getTotalPage();
	}

	/**
	 * 获取下一个页码,在调用之前先调用<code>isHasNextPage()</code>方法进行判断
	 * 
	 * @return
	 */
	public int getNextPage() {
		return pageNo + 1;
	}

	/**
	 * 判断是否还有上一页
	 *
	 * @return
	 */
	public boolean isHasPrePage() {
		return (pageNo - 1) > 0;
	}

	/**
	 * 获取上一个页码,在调用之前先调用<code>isHasPrePage()</code>方法进行判断
	 * 
	 * @return
	 */
	public int getPrePage() {
		return pageNo - 1;
	}
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java项目中常用的分页对象Page 的相关文章

  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • 当分配给变量时,我可以以某种方式重用 Gremlin GraphTraversals 代码吗?

    我有看起来像这样的 GraphTraversals attrGroup GraphTraversal
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • 使用替换字符串中多个单词的最有效方法[重复]

    这个问题在这里已经有答案了 此刻我正在做 Example line replaceAll replaceAll cat dog replaceAll football rugby 我觉得那很丑 不确定有更好的方法吗 也许循环遍历哈希图 ED
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它

随机推荐

  • 基于python的12306自动抢票系统的设计与实现

    铁路售票系统12306网站作为一个广受人们的日常使用工具 受大极大的关注 铁路售票的管理者都主要考虑降低成本 提升售票服务满意度 一年一度的春运和节假日出行高峰期 给众多的出行群众者带来了极大的烦恼 也给用户购买火车票造成了巨大的不方便 本
  • 未来几年学什么设计更有前途?

    设计 是把一种设想通过合理的规划 周密的计划 通过各种感觉形式传达出来的过程 是设计师有目标有计划的进行技术性的创作与创意活动 设计的任务不只是为生活和商业服务 同时也伴有艺术性的创作 它是一个很大范围的概念 如果单问未来几年学什么设计更有
  • 朴素贝叶斯分类器(Naive Bayes Classifiers)

    原文地址 Naive Bayes Classifiers 本文讨论的是朴素贝叶斯分类器 Naive Bayes classifiers 背后的理论以及其的实现 朴素贝叶斯分类器是分类算法集合中基于贝叶斯理论的一种算法 它不是单一存在的 而是
  • 西门子工业无线IWLAN和漏波电缆RCoax的安装与配置方法

    1 目的 安装和配置西门子IWLAN工业无线通信 包括工业无线AP 客户端和RCoax漏波电缆 从而实现两个PLC的无线通信 智能IO设备 博途工控人平时在哪里技术交流博途工控人社群 博途工控人平时在哪里技术交流博途工控人社群 2 硬件布置
  • 基于Vue + Antd 搭建自己的博客后台管理系统

    博客后台管理 博客前台的项目地址 github com WqhForGitHu 前言 博客后台管理是基于 Vue Antd 实现的 Antd 确实是非常适合中后台应用的开发 有非常多的组件可以使用 非常多的组件可以使用 技术栈 Vue an
  • 将秒数转化为日期、时、分、秒

    1 说明 笔者最近在开发过程中 需要进行时间上的处理的地方比较多 有时候没有处理好导致出现各种的错误 这里主要是讲一下 如何时将秒数的时间转化为 yyyy MM dd HH mm ss 的格式 例如 2016 12 04 16 40 23的
  • 全备份、增量备份与差量备份

    基本概念 全备份 做的一个完整备份 差量备份 以上一次的全备份为基本做的备份 增量备份 以上一次全备份或增量备份为基本做的备份 看了概念以后是不是还是一头雾水 呵呵 正常 不过没关系 下面会举例说明 如果版本库不是很大 直接做全备份就好了
  • python--打字练习的成绩判定

    题目 模拟打字练习程序 假设original为原始内容 user Inputs为用户输入的内容 要求 用户输入的内容长度不得大于原始内容长度 若对应位置字符一致 则认为正确 否则 判定输入错误 最后成绩为 正确的字符数量 原始字符串长度 按
  • Jsoup解析Html获取内容

    在做自己的博客时遇到问题 文章列表需要文章内容的第一段作为列表的内容展示 但是编辑采用的是富文本编辑器 内容为html格式 这是上网搜到Jsoup可以解析html 希望能帮到需要的小伙陪 p span style font size 6 3
  • msvcr110.dll丢失的解决方法哪种好,推荐这个4种解决方法

    Msvcr110 dll是Microsoft Visual Studio 2012的运行时组件之一 这个DLL文件包含一些用于Windows操作系统的C 函数库 当程序需要这些函数时 它们会被加载到内存中 以便程序可以使用它们 当计算机提示
  • 程序员挣够了钱,到中年失业真的很可怕吗?

    最近一刷知乎全部都是大龄程序员失业危机 真的有这么可怕吗 程序员35岁就真的到了瓶颈期 我不这么认为 挣够了钱 当然不可怕 问题是没挣够啊 按题主的算法是 大城市薪资1w以上 45岁失业 工作20年可以挣够钱 那我们现在来算一下 20年12
  • 《HarmonyOS物联网应用开发》课程上线

    讲师简介 51CTO的学员们 大家好 我是51CTO学院的新晋讲师许思维 目前就职于江苏润和软件股份有限公司 任高级软件工程师一职 同时也是企业内训讲师 我擅长的领域包括Linux系统编程 单片机编程 以及Android App和Andro
  • multiple definition of `qMain(int, char**)'错误该怎么处理!

    原因 在 pro文件中重复使用了一些文件
  • ECMAScript5,6,7从基本语法到高级函数

    尚硅谷ES5 6 7教程 01 尚硅谷 ECMAScript入门介绍 01 尚硅谷 ECMAScript入门介绍
  • 下载chromium源码执行 generate_location_tags.py错误returned non-zero exit status 1

    今天下载chromium 碰到这个错误 以前也下载过 都很顺利 Error Command python3 src testing generate location tags py out src testing location tag
  • SVD分解的并行实现

    在之前的文章中 我对SVD进行了大致的了解 它在互联网高端领域中有广泛的应用 至于它的一些详细应 用以后再进一步学习 现在主要的问题是如何有效地实现SVD分解 接下来我会先用两种方法来实现SVD分 解 即基于双边Jacobi旋转的SVD和基
  • Jieba库的安装

    一 jieba库安装 jieba库是第三方库 不是安装包自带 需要通过pip指令安装 gt pip install jieba 或者 pip3 install jieba 方法一 直接安装 不建议使用 亲测安装很多python库的时候大家获
  • Hierarchical attentive knowledge graph embedding for personalized recommendation

    Hierarchical attentive knowledge graph embedding for personalized recommendation 文章目录 1 背景 2 模型 2 1 子图构建 2 2 Hierarchica
  • 第一个Java项目———Java实现简单图书管理系统(GUI)

    暑假写了个图书管理系统 编译器用的是eclipse 加入了WindowBuilder插件做界面 做的特丑 数据库用的是MySQL 实现了图书的查询 借阅 归还 删除 增加 用户的删除 查询 分为管理员和用户 源码地址 GitHub GitH
  • java项目中常用的分页对象Page

    在使用JAVA平台开发企业级应用时 常常会遇到分页的场景 而且每一个项目都有自己的分页方法 现在给出我自己总结的比较通用的分页对象 以供有需之人参考 package cn cgs corejava model persistent impo