`
Tin
  • 浏览: 138603 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分页的轻量实现

 
阅读更多



为我们的项目写的一个轻量的分页API。目的在于将分页与数据查询的逻辑完全剥离。我以前看过robbin发的通过detachedCriteria实现的分页那片贴子,里面把分页和数据查询结合在一起了。而我觉得分开更轻量,而且替换也比较容易。但是这个实现中有一个反模式,在逻辑中生成了代码,无奈之选,为了简便。其中字符生成可以自己扩展i18n实现,应该非常容易。
分页实现的接口:
package com.goldnet.framework.util.paging;

/** *//**
 * 分页操作的接口
 * 
@author Tin
 
*/

public interface IPagination {

    
/** *//**
     * 默认的分页大小
     
*/

    
public static final int DEFAULT_PAGE_SIZE = 15;

    
/** *//**
     * 默认的分页参数,指URL中用到的参数名
     
*/

    
public static final String PAGE_SIZE_KEY = "pageSize";

    
/** *//**
     * 默认的页码参数,指URL中用到的参数名
     
*/

    
public static final String PAGE_NO_KEY = "pageno";

    
/** *//**
     * 获取总页数
     * 
@return 总页数
     
*/

    
int getPageSum();

    
/** *//**
     * 下一页的页码
     * 
@return
     
*/

    
int getNextPageNo();

    
/** *//**
     * 上一页的页码
     * 
@return
     
*/

    
int getPrevPageNo();

    
/** *//**
     * 是否有下一页,即是否为最后一页
     * 
@return 是否有下一页
     
*/

    
boolean hasNextPage();

    
/** *//**
     * 是否有上一页,即是否为第一页
     * 
@return 是否有上一页
     
*/

    
boolean hasPrevPage();

    
/** *//**
     * 添加参数名称、值对,如果页面需要使用parameters传递分页外的附加参数
     * 
@param parameterName 参数名
     * 
@param parameterValue 参数值
     
*/

    
void addPageParameter(String parameterName, String parameterValue);

    String getPageUrl();

    String getPageHtmlStr();

    
int getItemSum();

    
void setItemSum(int itemSum);

    String getPageExtension();

    
void setPageExtension(String pageExtension);

    String getPageName();

    
void setPageName(String pageName);

    
int getPageNo();

    
void setPageNo(int pageNo);

    
int getPageSize();

    
void setPageSize(int pageSize);

}

抽象基类:
/** *//**
 *
 
*/

package com.goldnet.framework.util.paging;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;


/** *//**
 * 对PagingString的重构
 * 
@author Tin
 *
 
*/

public abstract class AbstractPagination implements IPagination {
    
/** *//**
     * Page上显示的List中的domainModel的总数
     
*/

    
protected int itemSum = -1;

    
/** *//**
     * 分页的大小
     
*/

    
protected int pageSize = DEFAULT_PAGE_SIZE;

    
/** *//**
     * 页数
     
*/

    
protected int pageNo = 0;

    
/** *//**
     * 分页的页面的相对URL,不包括后缀
     
*/

    
protected String pageName = null;

    
/** *//**
     * 页面的URL的后缀
     
*/

    
protected String pageExtension = ".action";

    
/** *//**
     * 参数列表
     
*/

    
protected List<PageParameter> parameterList = new LinkedList<PageParameter>();

    
/** *//**
         * 返回的分页信息的字符串
         
*/

    
protected String pageHtmlStr = null;

    
/** *//**
     * 默认的构造函数
     * 
@param pageName 分页的页面的相对URL,不包括后缀
     * 
@param pageExtension 页面的URL的后缀
     * 
@param itemSum Page上显示的List中的domainModel的总数
     * 
@param pageNo 页数
     * 
@param pageSize 分页的大小
     
*/

    
public AbstractPagination(String pageName, String pageExtension,
        
int itemSum, int pageNo, int pageSize) {
        
super();

        
this.pageName = pageName;
        
this.pageExtension = pageExtension;
        
this.itemSum = itemSum;
        
this.pageNo = pageNo;
        
this.pageSize = pageSize;
    }


    
/** *//**
     * 无PageSize构造函数,使用默认PageSize为15
     * 
@param pageName 分页的页面的相对URL,不包括后缀
     * 
@param pageExtension 页面的URL的后缀
     * 
@param itemSum Page上显示的List中的domainModel的总数
     * 
@param pageNo 页数
     
*/

    
public AbstractPagination(String pageName, String pageExtension,
        
int itemSum, int pageNo) {
        
super();

        
this.pageName = pageName;
        
this.pageExtension = pageExtension;
        
this.itemSum = itemSum;
        
this.pageNo = pageNo;
    }


    
/**//* (non-Javadoc)
     * @see com.goldnet.framework.util.paging.IPagination#getPageSum()
     
*/

    
public int getPageSum() {
        
if ((itemSum != -1&& (pageSize > 0)) {
            
return ((itemSum % pageSize) == 0? (itemSum / pageSize)
                                               : ((itemSum 
/ pageSize) + 1);
        }


        
return 0;
    }


    
/**//* (non-Javadoc)
     * @see com.goldnet.framework.util.paging.IPagination#getNextPageNo()
     
*/

    
public int getNextPageNo() {
        
return (pageNo < (getPageSum() - 1)) ? (pageNo + 1) : (getPageSum() -
        
1);
    }


    
/**//* (non-Javadoc)
     * @see com.goldnet.framework.util.paging.IPagination#getPrevPageNo()
     
*/

    
public int getPrevPageNo() {
分享到:
评论

相关推荐

    Android-一个快速实现RecyclerView分页加载的轻量级库

    本篇文章将详细探讨如何利用一个轻量级库快速实现RecyclerView的分页加载功能。 一、RecyclerView的基础知识 1. RecyclerView组件:RecyclerView是Android SDK中的一个视图组件,适用于显示大量可滚动的数据集。...

    一个不到150行代码实现的轻量级分页插件

    这个轻量级的分页插件,以其简洁的代码和灵活的架构,为开发者提供了快速实现分页功能的途径。结合以上讲解,开发者可以更好地理解和运用这个插件,提升项目的开发效率。在实际使用过程中,不断探索和优化,可以使...

    js jquery实现table假分页

    1. **jQuery基础**:jQuery是一个轻量级的JavaScript库,它简化了DOM操作、事件处理、动画和Ajax交互。在实现假分页中,jQuery主要用来选择元素、添加事件监听器以及执行DOM操作。 2. **HTML结构**:首先,我们需要...

    超好用轻量级MVC分页控件JPager.Net

    JPager.Net是一款针对MVC框架设计的轻量级分页控件,它的主要目标是提供一个简单、高效且易于使用的解决方案,帮助开发者在Web应用程序中实现动态数据分页功能。这款控件以其小巧的体积和出色的性能赢得了好评,非常...

    jQueryPager(JQuery分页插件pagination实现Ajax分页)

    jQueryPager是一款轻量级的jQuery分页插件,它允许开发者通过Ajax无刷新的方式实现网页数据的分页加载。此插件名为`pagination`,在CSDN等技术交流平台上被广泛讨论和分享。 **1. jQuery与Ajax** jQuery是一个强大...

    【ASP.NET编程知识】ABP入门系列之分页功能的实现.docx

    DTO 是一个轻量级的对象,用于在应用层和展现层之间传输数据。在我们的示例中,我们定义了一个名为 GetTasksInput 的 DTO,继承自 PagedSortedAndFilteredInputDto。 GetTasksInput DTO 包括以下属性: * ...

    jquery实现前台分页

    首先,jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax交互等任务。在jQuery中实现分页,我们通常会借助于插件,这里提到的是一个专为jQuery设计的前端分页插件。 这个插件的主要...

    QTableWidget实现大数据分页快速显示.zip

    这减少了内存开销,因为QTableWidgetItem是一个轻量级对象,但数量过多仍可能导致内存压力。 2. **数据更新策略**: 当需要切换页面或加载新数据时,先清空现有的QTableWidget中的所有item内容。这一步通过迭代表格...

    SSM分页完美实现

    MyBatis是一个轻量级的持久层框架,它允许开发者编写SQL语句并与Java代码无缝结合。在分页中,MyBatis通过动态SQL实现对数据库的分页查询。 四、分页实现步骤 1. **配置数据源** 首先,我们需要配置数据源,如...

    jquery前端实现分页效果

    首先,jQuery是一个轻量级的JavaScript库,它简化了DOM操作、事件处理、动画效果以及Ajax交互。在前端实现分页,jQuery提供了便利的API和方法来构建用户友好的界面。 1. **理解分页的基本原理** 分页通常涉及两个...

    jQuery实现Table分页跳转

    jQuery是一个轻量级的JavaScript库,它提供了一系列方便、高效的方法来操作DOM,实现复杂的交互效果,包括Table的分页功能。本教程将详细讲解如何使用jQuery实现Table的分页跳转。 一、jQuery分页原理 jQuery分页...

    ssh实现ajax分页

    5. **JSON**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在上述示例中,服务端返回的Page对象会被转换成JSON字符串,前端通过jQuery解析这个...

    jquery实现数据动态加载分页的完整版

    jQuery,作为一个轻量级且功能丰富的JavaScript库,提供了方便的方式来实现这些功能。本文将深入探讨如何使用jQuery实现数据动态加载分页,并提供一个完整的实例。 首先,理解动态加载(也称为无限滚动或懒加载)的...

    spring-data集成mongodb大数据量分页+自增id实现+MongodbPlugin集成

    skip随着数据量上去,分页性能极具下降,不推荐。这里使用spring-data-mongo实现的分页,并且实现了mongodb自增id(监听器方式)、也集成了轻量级插件MongodbPlugin,有需要的可以下载看看哦~

    layui 简单实现 TABLE 分页功能

    layui 是一款轻量级的前端框架,以其简洁的API和丰富的组件库深受开发者喜爱。在网页开发中,数据展示往往需要配合分页功能,以提高用户体验和加载速度。本篇文章将详细讲解如何使用 layui 实现 TABLE 的分页功能。 ...

    jquery实现分页

    首先,jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等任务。在实现分页功能时,jQuery提供了便利的DOM操作和事件绑定功能。 1. **基础结构** - 创建HTML结构:通常,分页...

    ibatis实现分页技术

    在Java Web开发中,Ibatis作为一个轻量级的持久层框架,被广泛应用于数据库操作。在处理大量数据时,为了提高用户体验,分页显示数据变得至关重要。本篇将详细讲解如何利用Ibatis实现分页技术。 一、Ibatis简介 ...

    jQuery分页demo实现

    jQuery是一个轻量级、高性能的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等任务。在分页功能的实现中,jQuery主要负责DOM操作和事件绑定,使得代码更加简洁高效。 1. **基础概念** 分页通常...

    react-结合react实现的分页插件

    React作为一个轻量级的JavaScript库,它允许开发者通过组件化的方式来构建应用程序。在React中实现分页组件,我们可以遵循以下步骤: 1. **设计组件结构**:首先,我们需要设计分页组件的基本结构。它通常包括页码...

    jquery实现数组array、集合list、json类型的分页支持多个分页

    首先,我们要了解jQuery,它是一个轻量级的JavaScript库,提供了丰富的DOM操作、事件处理、动画效果等功能,使得JavaScript开发变得更加简单。在实现分页功能时,jQuery可以帮助我们更高效地操作DOM元素,更新页面...

Global site tag (gtag.js) - Google Analytics