由于很多人需要com.polaris.jqgrid.util.Page这个类
package com.polaris.jqgrid.util;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.StringUtils;
/**
* 与具体ORM实现无关的分页参数及查询结果封装.
*
* @param <T> Page中记录的类型.
* @author xuxinhua
*/
public final class Page<T> {
// 公共变量
public static final String ASC = "asc";
public static final String DESC = "desc";
public static final int MIN_PAGESIZE = 1; //
每页显示的最少记录数
public static final int MAX_PAGESIZE = 200; //
每页显示的最大记录数
// 分页参数
protected int curPageNo = 1; //
当前所在页码(在第几页)
protected int pageSize = MIN_PAGESIZE; //
当前每页显示的记录数
protected String orderBy = null; //
排序字段
protected String order = null; //
排序方式(升序或降序)
protected boolean autoCount = false; //
查询对象时是否自动另外执行count查询获取总记录数
// 返回结果
protected List<T> result = Collections.emptyList(); //
当前页的实际记录数
protected int totalCount = -1; //
记录总数
/**
* 默认构造函数
*/
public Page() {
super();
}
/**
* 通过设置每页显示多少条记录来构造对象
* @param pageSize
*/
public Page(final int pageSize) {
setPageSize(pageSize);
}
/**
*
* @param pageSize
* @param autoCount
*/
public Page(final int pageSize, final boolean autoCount) {
setPageSize(pageSize);
this.autoCount = autoCount;
}
// 查询参数函数
/**
* 获得当前页的页号,序号从1开始,默认为1.
*/
public int getCurPageNo() {
return curPageNo;
}
/**
* 设置当前页的页号,序号从1开始,低于1时自动调整为1.
* @param curPageNo
*/
public void setCurPageNo(final int curPageNo) {
this.curPageNo = curPageNo;
if (curPageNo < 1) {
this.curPageNo = 1;
}
}
/**
* 获得每页的记录数量,默认为10.
*/
public int getPageSize() {
return pageSize;
}
/**
* 设置每页的记录数量,超出MIN_PAGESIZE与MAX_PAGESIZE范围时会自动调整.
* @param pageSize
*/
public void setPageSize(final int pageSize) {
this.pageSize = pageSize;
if (pageSize < MIN_PAGESIZE) {
this.pageSize = MIN_PAGESIZE;
}
else if (pageSize > MAX_PAGESIZE) {
this.pageSize = MAX_PAGESIZE;
}
}
/**
* 根据curPageNo和pageSize(每页显示记录数)计算当前页第一条记录在总结果集中的位置,序号从0开始.
*/
public int getFirst() {
return ((curPageNo - 1) * pageSize);
}
/**
* 获得排序字段,无默认值。多个排序字段时用','分隔,仅在Criterion查询时有效.
*/
public String getOrderBy() {
return this.orderBy;
}
/**
* 设置排序字段。多个排序字段时用','分隔.仅在Criterion查询时有效.
* @param orderBy
要排序的字段
*/
public void setOrderBy(final String orderBy) {
this.orderBy = orderBy;
}
/**
* 是否已设置排序字段,仅在Criterion查询时有效.
*/
public boolean isOrderBySetted() {
return StringUtils.isNotBlank(orderBy); // isNotBlank判断:当orderBy不等于null、""或"
"时返回true
}
/**
* 获得排序方向,默认为asc,仅在Criterion查询时有效.
*/
public String getOrder() {
return this.order;
}
/**
* 设置排序方式向,仅在Criterion查询时有效.
* @param order
可选值为desc或asc,多个排序字段时用','分隔.
*/
public void setOrder(final String order) {
// 检查order字符串的合法值
String[] orders = StringUtils.split(StringUtils.lowerCase(order), ',');
for (String orderStr : orders) {
if (!StringUtils.equals(DESC, orderStr)
&& !StringUtils.equals(ASC, orderStr))
throw new IllegalArgumentException("排序方向"
+ orderStr + "不是合法值");
}
this.order = StringUtils.lowerCase(order);
}
/**
* 查询对象时是否自动另外执行count查询获取总记录数,默认为false,仅在Criterion查询时有效.
*/
public boolean isAutoCount() {
return autoCount;
}
/**
* 查询对象时是否自动另外执行count查询获取总记录数,仅在Criterion查询时有效.
* @param autoCount
*/
public void setAutoCount(final boolean autoCount) {
this.autoCount = autoCount;
}
// 查询结果函数
/**
* 取得页内的记录列表.
*/
public List<T> getResult() {
return result;
}
/**
* 设置页内的记录列表.
* @param result
*/
public void setResult(final List<T> result) {
this.result = result;
}
/**
* 取得总记录数,默认值为-1.
*/
public int getTotalCount() {
return totalCount;
}
/**
* 设置总记录数
* @param totalCount
*/
public void setTotalCount(final int totalCount) {
this.totalCount = totalCount;
}
/**
* 根据pageSize与totalCount计算总页数,默认值为-1.
*/
public int getTotalPages() {
if (totalCount < 0)
return -1;
int count = totalCount / pageSize;
if (totalCount % pageSize > 0) {
count++;
}
return count;
}
/**
* 是否还有下一页.
*/
public boolean isHasNext() {
return (curPageNo
+ 1 <= getTotalPages());
}
/**
* 取得下页的页号,序号从1开始.
*/
public int getNextPage() {
if (isHasNext())
return curPageNo
+ 1;
else
return curPageNo;
}
/**
* 是否还有上一页.
*/
public boolean isHasPre() {
return (curPageNo - 1 >= 1);
}
/**
* 取得上页的页号,序号从1开始.
*/
public int getPrePage() {
if (isHasPre())
return curPageNo - 1;
else
return curPageNo;
}
}
分享到:
相关推荐
这里提到的"对分页进行了封装,PageUtil.java工具类"是一个Java实现的分页辅助类,它的主要目标是简化分页查询的操作,提供更便捷的API给开发者使用。 `PageUtil.java`工具类可能包含了以下功能: 1. **参数处理**...
`Pageable`定义了当前页码、每页大小以及排序方式,而`Page`则封装了当前页的数据及分页信息。 5. **Spring Boot集成分页** Spring Boot简化了Spring Data JPA的使用,只需在配置中启用相应的starter模块,如`...
其主要工作原理是在Mybatis的Executor执行器中添加拦截器,对原始的SQL语句进行修改,自动添加分页参数,从而实现分页查询。PageHelper的优点在于无需手动编写分页代码,只需设置好参数即可。 下面,我们来详细说明...
ASP.NET MVC5 实现分页查询的示例代码,演示了如何使用 Dapper 框架来实现数据库的查询操作,如何使用 Razor 语法来实现视图的渲染,并如何封装分页按钮的绘制代码。 知识点: 1. ASP.NET MVC5 框架的特点和优势 2...
本文将深入探讨如何在Hibernate中进行分页查询的封装,并提供相关的源码和工具使用方法。 首先,我们需要了解Hibernate中的Criteria查询,这是实现分页查询的一种方式。Criteria API允许我们以面向对象的方式构建...
这个"mysql封装.zip"文件包含的具体实现细节,可能涵盖了以上的一个或多个方面。下载后,你可以通过阅读源代码,了解具体实现方式,学习如何在自己的C++项目中有效地使用MySQL数据库。同时,也可以参与讨论,与其他...
在执行查询时,我们还需要结合Criteria的setFirstResult和setMaxResults方法来实现分页效果。 接下来,MyBatisDemo可能是指MyBatis框架的一个示例项目,尽管SSH框架中通常使用Hibernate进行数据访问,但MyBatis也是...
5. 分页参数: - `PageIndex`:当前页码,从1开始计数。 - `PageSize`:每页显示的数据条数。 - `TotalCount`:总数据条数,用于计算总页数。 6. 分页实现步骤: - 计算总页数:`TotalPages = TotalCount / ...
在Java编程中,分页查询是一项非常常见的任务,特别是在处理大量数据时,为了提高用户体验和系统性能,我们通常不会一次性加载所有数据,而是分批次地显示。本篇将详细讲解如何利用Java、JDBC、Servlet、JSTL和EL...
这个方法可能使用ORM框架如Entity Framework,配合SQL查询语句,或者使用存储过程来实现高效分页。 ```csharp public ActionResult Search(string txtName, int nStatus, string dOperateTime, int pageSize, int ...
本项目"分页Hibernate-mysql-jsp.rar"显然关注的是如何在Java Web环境中实现数据库查询结果的分页显示。这里我们将深入探讨涉及到的三个关键技术和概念:Hibernate、MySQL以及JSP。 首先,**Hibernate** 是一个流行...
【ORM与分页SQL】 ORM(Object-Relational Mapping)是一种编程技术,用于将关系数据库的数据映射到对象上,使得开发人员可以使用面向对象的方式来操作数据库。在处理大量数据时,分页查询是非常常见的需求,它能...
根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...
Struts2.0 是一个流行的Java Web开发框架,它提供了一种组织和控制MVC(Model-...同时,随着技术的发展,现代的Web应用可能更倾向于使用ORM框架(如Hibernate)和前端分页库(如jQuery DataTables)来简化分页实现。
在分页程序中,可能会有一个Bean类来封装每页的数据和分页参数。 3. **数据库查询**:分页需要根据当前页码和每页显示的条目数来调整SQL查询。例如,使用`LIMIT`和`OFFSET`(在MySQL中)或`ROW_NUMBER()`(在SQL ...
在提供的"demo2"文件中,可能包含了一个已经封装好的Oracle JDBC分页实现,你可以查阅这个示例代码,了解具体的实现方式。该示例可能是通过传递SQL语句,结合Java代码处理ROWNUM或者使用其他高级分页方法来实现分页...
这篇博文“利用java反射、注解及泛型模拟ORM实现”旨在探讨如何结合这三种技术来实现对象关系映射(ORM),这是一种将数据库表与Java对象之间进行绑定的技术,简化了数据操作。 首先,我们来理解一下这三个概念: ...
**一、jQuery分页插件的选择与使用** jQuery提供了许多分页插件,例如`jQuery DataTables`、`jQuery Pagination`等。以`jQuery DataTables`为例,它是广泛使用的表格增强插件,内置了强大的分页功能。 1. **安装和...
- 分页结果:封装查询结果和分页信息,如总记录数、总页数等。 5. **最佳实践**: - 避免一次性加载大量数据,以免内存溢出。 - 在前端处理分页时,应限制显示的页码范围,避免过多的页码导致用户操作不便。 - ...