java数据分页_Java数据分页通用封装

本文介绍了Java数据分页的封装方法,包括核心接口IPageList和IPager,以及抽象类AbstractPageList和AbstractPager。通过设置每页数量和当前页,实现分页查询数据库并处理结果。提供了在Struts2+Spring+Mybatis环境下使用示例,并提供ibatis和mybatis的IPageList实现下载链接。
摘要由CSDN通过智能技术生成

原理

数据库分页,从客户角度来看,主要是提供两个参数:每页数量(pageSize),当前页(currentPage)。从后台处理来看,主要是分页查询数据库,查询总数;所以只需处理好这两个参数就可以完成分页了。

本文内容

本文的封装参考easyjweb pageList名字,(只是以前用过,继承关系实现应该都不一样)。

本文中总共设计到了两个核心接口:

IPageList: 数据查询和结果承载的主接口

IPager: 页面相关处理接口

另外,提供了抽象类,做公共处理,见AbstractPageList、AbstractPager。

如因为持久层使用技术的不同,要实现使用该接口,请继承AbstractPageList类,实现抽象方法。

如想实现自己的页面显示的分页组件,请继承AbstractPager类,实现抽象方法。

本文,下面的下载中,会有ibatis和mybatis的两个IPageList实现的实现。这就是说,如果您的项目使用的是上述两种持久层,则可以直接拿来使用。否则,请继承AbstractPageList实现响应持久层的代码。

使用方法

IPageList pList=new XxxPageList([param]);//初始化,设置参数

pList.doList();//发出实际查询

pList.getResult();//可选操作,得到并处理相应数据

IPager pager=new XxxPager(pageList);//创建分页组件类

pager.save2Request(request,"listName");//保存数据,以及分页组件到页面

页面合适的位置放置${pager}

如果这里看的不是很明白,我举个web三次应用中的实际代码,方便大家理解(struts2+spring+mybatis)

action层public String doList(){

HttpServletRequest request=ServletActionContext.getRequest();

String callNum=request.getParameter("userName");

String accNum=request.getParameter("phone");

if(StringUtils.isBlank(userName)&&StringUtils.isBlank(phone)){

request.setAttribute("message", "查询参数不能全空");

return "list";

}

//获得分页参数

String currentPage=request.getParameter("currentPage");

String pageSize=request.getParameter("pageSize");

HashMap param=new HashMap();

param.put("userName", userName);

param.put("phone", phone);

param.put("currentPage", currentPage);

param.put("pageSize", pageSize);

IPageList pList=service.selectList(param);

IPager pager=new MiniPager(pList);

pager.save2Request(request, "list");

return "list";

}

service层,只需透明传递到dao

dao层public IPageList selectList(HashMap param){

IPageList pList=new MyBatisPageList(sqlSession, "user.selectList", "user.selectListCount", param);

pList.doList();

return pList;

}

这样写大家应该都能对这个比较容易理解了吧。页面上,只需在table列表下面加上${pager}就可以了,里面包含了js,和页面需要的html等内容。

主要的接口和抽象实现

IPageList.java

import java.util.List;

/**

*

* 分页接口,对于采用不同持久化方案的分页,继承该类并实现相应方法即可使用

* 使用方法:

* 1.IPageList pList=new XxxPageList([param]);//初始化,设置参数

* 2.pList.doList();//发出实际查询

* 3.pList.getResult();//可选,得到并处理相应数据

* 4.IPager pager=new XxxPager(pageList);//创建分页组件类

* 5.pager.save2Request(request,"listName");//保存数据,以及分页组件到页面

* 6.页面合适的位置放置${pager}

*

* 注意,sql语句要带有分页参数startNum, endNum

* @author wutb1

* 2013-10-31 上午11:02:23

* @version 1.0.0.0

*/

public interface IPageList {

/**

* 发出查询

*/

void doList();

/**

* 得到查询的结果,个数为pageSize的个数

* @return

*/

List getResult();

/**

* 设置每页大小

* @param pageSize

*/

void setPageSize(int pageSize);

/**

* 得到当前设置的每页大小

* @return

*/

int getPageSize();

/**

* 设置当前页

* @param currentPage

*/

void setCurrentPage(int currentPage);

/**

* 得到设置的当前页

* @return

*/

int getCurrentPage();

/**

* 得到符合记录的总个数

* @return

*/

int getTotalCount();

/**

* 得到总的分页数

* @return

*/

int getTotalPage();

}

IPager.java

import javax.servlet.http.HttpServletRequest;

/**

* 页面上分页组件的抽象

* 1.定义页面分页组件

* 2.返回页面参数

* 使用方式

* 1.IPager pager=new XxxPager(IPageList);

* 2.pager.save2Request(request,"listName");

*

* @author wutb1

* 2014-4-22 下午07:36:15

* @version 1.0.0.0

*/

public interface IPager {

void setPageList(IPageList pList);

IPageList getPageList();

/**

* 保存PageList中的数据到页面

* @param request

* @param listName

*/

void save2Request(HttpServletRequest request,String listName);

/**

* 得到页面分页组件,一般包含

* 1.组件的html

* 2.分页用隐藏域

* 3.组件响应的js处理方法

*

* @return

*/

String getPager();

}

AbstractPageList.java

import java.util.List;

/*

* 分页抽象类,实现公用的部分

* 1.分页参数的处理pageSize、currentPage、totalCount、totalPage

* 2.查询生命周期

* @non javadocs

* @see IPageList

*/

public abstract class AbstractPageList implements IPageList{

private int pageSize=20;//默认20

private int currentPage=1;//默认1

private int totalCount;

private int totalPage;

/**

* 数据

*/

private List result;

public void doList(){

beforeQuery();

result=queryList();

totalCount=queryTotalCount();

//计算总页数

calTotalPage();

afterQuery();

}

/**

* 计算总页数

*/

private void calTotalPage(){

totalPage=(int)Math.ceil((double)totalCount/pageSize);

}

/**

* 抽象方法,根据currentPage和pageSize查询数据

* @return

*/

protected abstract List queryList();

/**

* 抽象方法,查询总的数据数量

* @return

*/

protected abstract int queryTotalCount();

/**

* 两个回调函数

*/

protected abstract void beforeQuery();

protected abstract void afterQuery();

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public int getCurrentPage() {

return currentPage;

}

public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;

}

public int getTotalCount() {

return totalCount;

}

public int getTotalPage() {

return totalPage;

}

public List getResult() {

return result;

}

}

AbstractPager.java

public abstract class AbstractPager implements IPager{

private IPageList pageList;

public IPageList getPageList() {

return this.pageList;

}

public void setPageList(IPageList pageList) {

this.pageList=pageList;

}

/*

* (non-Javadoc)

* @see cn.com.jiexun.utils.IPageUtil#save2Request(javax.servlet.http.HttpServletRequest, java.lang.String)

*/

public void save2Request(HttpServletRequest request, String listName) {

saveCommon(request);

request.setAttribute(listName, getPageList().getResult());

}

private void saveCommon(HttpServletRequest request){

request.setAttribute("pageSize", getPageList().getPageSize());

request.setAttribute("currentPage", getPageList().getCurrentPage());

request.setAttribute("totalCount", getPageList().getTotalCount());

request.setAttribute("totalPage", getPageList().getTotalPage());

//html页面,分页组件

request.setAttribute("pager", getPager());

}

}

下载地址

http://pan.baidu.com/s/1hqgg8Bi

--------------------------

如果你对java、swing、各种框架、javascript、css、linux、数据库编程等知识很感兴趣,或者正在从事这些工作,

欢迎加入我的qq技术交流群:java不瘸腿(219345774)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值