`

使用jggrid时与具体ORM实现无关的分页参数及查询结果封装.

 
阅读更多

由于很多人需要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_PAGESIZEMAX_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;

}

}

/**

* 根据curPageNopageSize(每页显示记录数)计算当前页第一条记录在总结果集中的位置,序号从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 可选值为descasc,多个排序字段时用','分隔.

*/

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;

}

/**

* 根据pageSizetotalCount计算总页数,默认值为-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工具类

    这里提到的"对分页进行了封装,PageUtil.java工具类"是一个Java实现的分页辅助类,它的主要目标是简化分页查询的操作,提供更便捷的API给开发者使用。 `PageUtil.java`工具类可能包含了以下功能: 1. **参数处理**...

    java实现分页示例代码共6页.pdf.zip

    `Pageable`定义了当前页码、每页大小以及排序方式,而`Page`则封装了当前页的数据及分页信息。 5. **Spring Boot集成分页** Spring Boot简化了Spring Data JPA的使用,只需在配置中启用相应的starter模块,如`...

    spring+Mybatis+ PageHelper实现分页

    其主要工作原理是在Mybatis的Executor执行器中添加拦截器,对原始的SQL语句进行修改,自动添加分页参数,从而实现分页查询。PageHelper的优点在于无需手动编写分页代码,只需设置好参数即可。 下面,我们来详细说明...

    【ASP.NET编程知识】ASP.NET MVC5 实现分页查询的示例代码.docx

    ASP.NET MVC5 实现分页查询的示例代码,演示了如何使用 Dapper 框架来实现数据库的查询操作,如何使用 Razor 语法来实现视图的渲染,并如何封装分页按钮的绘制代码。 知识点: 1. ASP.NET MVC5 框架的特点和优势 2...

    Hibernate中分页查询的封装。

    本文将深入探讨如何在Hibernate中进行分页查询的封装,并提供相关的源码和工具使用方法。 首先,我们需要了解Hibernate中的Criteria查询,这是实现分页查询的一种方式。Criteria API允许我们以面向对象的方式构建...

    mysql封装.zip

    这个"mysql封装.zip"文件包含的具体实现细节,可能涵盖了以上的一个或多个方面。下载后,你可以通过阅读源代码,了解具体实现方式,学习如何在自己的C++项目中有效地使用MySQL数据库。同时,也可以参与讨论,与其他...

    SSH实现分页实例

    在执行查询时,我们还需要结合Criteria的setFirstResult和setMaxResults方法来实现分页效果。 接下来,MyBatisDemo可能是指MyBatis框架的一个示例项目,尽管SSH框架中通常使用Hibernate进行数据访问,但MyBatis也是...

    C#其他分页实现源码参考Demo'.rar

    5. 分页参数: - `PageIndex`:当前页码,从1开始计数。 - `PageSize`:每页显示的数据条数。 - `TotalCount`:总数据条数,用于计算总页数。 6. 分页实现步骤: - 计算总页数:`TotalPages = TotalCount / ...

    Java实现分页查询

    在Java编程中,分页查询是一项非常常见的任务,特别是在处理大量数据时,为了提高用户体验和系统性能,我们通常不会一次性加载所有数据,而是分批次地显示。本篇将详细讲解如何利用Java、JDBC、Servlet、JSTL和EL...

    详解MVC如何使用开源分页插件(shenniu.pager.js)

    这个方法可能使用ORM框架如Entity Framework,配合SQL查询语句,或者使用存储过程来实现高效分页。 ```csharp public ActionResult Search(string txtName, int nStatus, string dOperateTime, int pageSize, int ...

    分页Hibernate-mysql-jsp.rar

    本项目"分页Hibernate-mysql-jsp.rar"显然关注的是如何在Java Web环境中实现数据库查询结果的分页显示。这里我们将深入探讨涉及到的三个关键技术和概念:Hibernate、MySQL以及JSP。 首先,**Hibernate** 是一个流行...

    仿orm自动生成分页SQL分享

    【ORM与分页SQL】 ORM(Object-Relational Mapping)是一种编程技术,用于将关系数据库的数据映射到对象上,使得开发人员可以使用面向对象的方式来操作数据库。在处理大量数据时,分页查询是非常常见的需求,它能...

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...

    struts2.0实现的数据分页实现及实现分页步骤

    Struts2.0 是一个流行的Java Web开发框架,它提供了一种组织和控制MVC(Model-...同时,随着技术的发展,现代的Web应用可能更倾向于使用ORM框架(如Hibernate)和前端分页库(如jQuery DataTables)来简化分页实现。

    . jsp分页程序.....

    在分页程序中,可能会有一个Bean类来封装每页的数据和分页参数。 3. **数据库查询**:分页需要根据当前页码和每页显示的条目数来调整SQL查询。例如,使用`LIMIT`和`OFFSET`(在MySQL中)或`ROW_NUMBER()`(在SQL ...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    在提供的"demo2"文件中,可能包含了一个已经封装好的Oracle JDBC分页实现,你可以查阅这个示例代码,了解具体的实现方式。该示例可能是通过传递SQL语句,结合Java代码处理ROWNUM或者使用其他高级分页方法来实现分页...

    利用java反射、注解及泛型模拟ORM实现

    这篇博文“利用java反射、注解及泛型模拟ORM实现”旨在探讨如何结合这三种技术来实现对象关系映射(ORM),这是一种将数据库表与Java对象之间进行绑定的技术,简化了数据操作。 首先,我们来理解一下这三个概念: ...

    使用jquery实现表格动态分页

    **一、jQuery分页插件的选择与使用** jQuery提供了许多分页插件,例如`jQuery DataTables`、`jQuery Pagination`等。以`jQuery DataTables`为例,它是广泛使用的表格增强插件,内置了强大的分页功能。 1. **安装和...

    java通用分页代码实例.rar

    - 分页结果:封装查询结果和分页信息,如总记录数、总页数等。 5. **最佳实践**: - 避免一次性加载大量数据,以免内存溢出。 - 在前端处理分页时,应限制显示的页码范围,避免过多的页码导致用户操作不便。 - ...

Global site tag (gtag.js) - Google Analytics