`
Tin
  • 浏览: 137167 次
  • 性别: 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分页加载的轻量级库

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

    一个简单实用的jq分页插件,该插件将ajax抽出只进行当前为第几页的计算,请在回调内自行写入ajax请求

    java前端分页实现

    一个比较好用的轻量级分页功能的实现,只要调用方法即可

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

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

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

    JPager.Net MVC好用的轻量级分页控件,实现非常简单,使用也非常简单。 JPager.Net MVC好用的轻量级分页控件,代码精心推敲,经多人反复建议修改,最终成型使用中。非常好用分享给大家。源代码一共放出来。先上个...

    轻量化的Java网络爬虫 GECCO.zip

    Gecco是一款用java语言开发的轻量化的易用的网络爬虫。Gecco整合了jsoup、httpclient、fastjson、spring、htmlunit、redission等优秀框架,让您只需要配置一些jquery风格的选择器就能很快的写出一个爬虫。Gecco框架...

    JDBC轻量级封装(包含数据库真分页查询),好用

    对JDBC的封装,适合多种数据库,使用简单方便。...包含对oracle,mysql,sqlserver等数据库的分页查询实现,之前传的没有simple,这次加上了 (欢迎下载我的最新改良版本:http://download.csdn.net/source/1644852)

    Django+Paginator模块+LayUi实现分页(精简版)

    Django之Paginator分页模块+layui表格(精简版) 上一篇也分享了一个关于Paginator+layui的ajax动态加载数据...Paginator:Django自带的一个轻量级分页模块 layui:类UI(谐音),一款强大的国产前端框架,相对Bootstrap来

    pagination分页插件

    JqueryPagination是个简单轻量级的分页插件,使用起来很容易,只要初始化一个实例,并设置总数量、翻页回调函数、其它参数就可以实现无刷新分页功能了

    CMS轻量级系统

    Java 轻量级的 CMS 解决方案-天梯。天梯是一个用 Java 相关技术搭建的后台 CMS 解决方案,用户可以结合自身业务进行相应扩展,同时提供了针对 dao、service 等的代码生成工具。技术选型:Spring Data JPA、Hibernate...

    PagedRecyclerView:具有Android分页功能的RecyclerView控件

    PagedRecyclerView 具有用于Android的分页功能的RecyclerView适配器。 它具有RecyclerView的所有功能,但是此适配器可轻松添加对分页(不确定长度)列表的支持。 您可以自定义加载布局,所有数据处理都通过一个简单...

    jquery+json实现分页效果

    Json作为一种轻量级的数据交换格式,由于其传输数据格式的方便性,今天偶然想将其应用于分页实现,分页做为web开发一个长久的话题,其应用的高效与重要性就不多说了 本文主要技术:反射机制,Json数据格式,jquery ...

    Tommy framework v1.0.2 易用的轻量级PHP框架.zip

    Tommy framework是一个简单易用易于扩展的轻量级PHP框架,遵循Apache2开源协议发布。本框架操作灵活而不失功能强大,使用简单而又能扩展自如。作为PHP框架里的 “后起者”,Tommy framework秉承了以往那些优秀PHP...

    原生JS打印插件之jQuery.EasyPrint.js使用文档

    原生JS打印插件之jQuery.EasyPrint.js使用文档 调用浏览器自带打印功能,使用JavaScript的 window.print(); 方法。 使用JS实现打印功能;JavaScript 实现打印操作;...自主研发的一个轻量级超简单的js打印插件。

    最新轻量级SpringBoot+MyBatis+Thymeleaf博客系统 [初云博客-SpringBoot版本]

    采用轻量级安全框架 Shiro,目前本站由三种角色(管理员,作者,订阅者),也可以动态添加角色,并绑定权限,权限和后台菜单挂钩。 ElasticSearch 作为本站的站内搜索框架,支持分词检索数据和关键词高亮。 模板引擎...

    zzcms轻量级企业网站管理系统 v1.0 beta

    本程序是一款轻量级企业网站管理系统,基于PHP+Mysql架构,可运行在Linux、Windows等各种平台上,系统搭载Smarty模板引擎,支持伪静态。后端使用Smarty框架,MVC模式。前端使用响应式HTML5+DIV+CSS框架,兼容IE6等...

    Android Room 数据库快速上手 示例代码

    Android Room是Google发布的一个和SQLite相关的的数据库,它是一个轻量级的ORM(Object Relational Mapping)对象关系映射数据库,其本质上是对Android原生的SQLite的封装,只不过相对比原生操作更简单、高效,目前...

    基于vue实现swipe分页组件实例

    我们今天的主角登场了, thebird/Swipe ,这个插件完成了图片轮播需要的基本功能,只有 14.2k ,真真的 轻量级 啊。还有,还有 翻译一下,就是俺们全支持,不管你是PC端(IE7+)还是移动端浏览器。此处应该有掌声,...

    轻量级的 .Net ORM DbEntry.zip

    DbEntry.Net是一个轻量级的 .Net ORM (Object Relational Mapping) 数据访问及 WEB 框架。对于 ORM 和 Sql 调用,它都拥有清晰和易用的接口,目前支持 SqlServer、SQLite、MySql、Access、Firebird、PostgreSQL、...

    petapoco增删改查分页、BaseDAL

    轻量级ORM框架,然后写了一个BaseDAL,实现对所有类GURD和分页操作,,新手,写的不好,(by the way.if u are steel,call me go smoking now)

Global site tag (gtag.js) - Google Analytics