java-SSH2实现数据库和界面的分页
分页应该是在我们开发web应用时经常要做的工作,能够比较简洁的实现数据库和视图层的分页十分重要。
在数据库层利用hibernate进行数据库的分页,将从数据库中查询出的数据封装为javabean;在视图层就可以方便的实现分页。
创建PageBean
packagecom.fishing.common.bean;
importjava.util.List;
@SuppressWarnings("unchecked")
publicclassPageBean{
privateListlist;//要返回的某一页的记录列表
privateintallRow;//总记录数
privateinttotalPage;//总页数
privateintcurrentPage;//当前页
privateintpageSize;//每页记录数
privatebooleanisFirstPage;//是否为第一页
privatebooleanisLastPage;//是否为最后一页
privatebooleanhasPreviousPage;//是否有前一页
privatebooleanhasNextPage;//是否有下一页
publicListgetList(){
returnlist;
}
publicvoidsetList(Listlist){
this.list=list;
}
publicintgetAllRow(){
returnallRow;
}
publicvoidsetAllRow(intallRow){
this.allRow=allRow;
}
publicintgetTotalPage(){
returntotalPage;
}
publicvoidsetTotalPage(inttotalPage){
this.totalPage=totalPage;
}
publicintgetCurrentPage(){
returncurrentPage;
}
publicvoidsetCurrentPage(intcurrentPage){
this.currentPage=currentPage;
}
publicintgetPageSize(){
returnpageSize;
}
publicvoidsetPageSize(intpageSize){
this.pageSize=pageSize;
}
/***/
/**
*初始化分页信息
*/
publicvoidinit(){
this.isFirstPage=isFirstPage();
this.isLastPage=isLastPage();
this.hasPreviousPage=isHasPreviousPage();
this.hasNextPage=isHasNextPage();
}
/***/
/**
*以下判断页的信息,只需getter方法(is方法)即可
*
*@return
*/
publicbooleanisFirstPage(){
return(currentPage==1);//如是当前页是第1页
}
publicbooleanisLastPage(){
returncurrentPage==totalPage;//如果当前页是最后一页
}
publicbooleanisHasPreviousPage(){
returncurrentPage!=1;//只要当前页不是第1页
}
publicbooleanisHasNextPage(){
returncurrentPage!=totalPage;//只要当前页不是最后1页
}
/***/
/**
*计算总页数,静态方法,供外部直接通过类名调用
*
*@parampageSize
*每页记录数
*@paramallRow
*总记录数
*@return总页数
*/
publicstaticintcountTotalPage(finalintpageSize,finalintallRow){
inttotalPage=allRow%pageSize==0?allRow/pageSize:allRow
/pageSize+1;
returntotalPage;
}
/***/
/**
*计算当前页开始记录
*
*@parampageSize
*每页记录数
*@paramcurrentPage
*当前第几页
*@return当前页开始记录号
*/
publicstaticintcountOffset(finalintpageSize,finalintcurrentPage){
finalintoffset=pageSize*(currentPage-1);
returnoffset;
}
/***/
/**
*计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
*
*@parampage
*传入的参数(可能为空,即0,则返回1)
*@return当前页
*/
publicstaticintcountCurrentPage(intpage){
finalintcurPage=(page==0?1:page);
returncurPage;
}
}
在Dao的抽象接口BaseDao中添加方法:
publicListqueryForPage(finalStringhql,finalintoffset,
finalintlength);
在Dao的实现类JianSheDWDaoImpl中实现方法
publicListqueryForPage(finalStringhql,finalintoffset,
finalintlength){
Listlist=getHibernateTemplate().executeFind(newHibernateCallback(){
publicObjectdoInHibernate(Sessionsession)
throwsHibernateException,SQLException{
Queryquery=session.createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(length);
Listlist=query.list();
returnlist;
}
});
returnlist;
}
在service抽象层接口JianSheDWService中添加方法:
publicPageBeanqueryForPage(intpageSize,intcurrentPage);
在service实现类中实现方法:
publicPageBeanqueryForPage(intpageSize,intpage){
finalStringhql="fromJianSheDWBean";//查询语句
intallRow=this.baseDao.getAllRowCount(hql);//总记录数
inttotalPage=PageBean.countTotalPage(pageSize,allRow);//总页数
finalintoffset=PageBean.countOffset(pageSize,page);//当前页开始记录
finalintlength=pageSize;//每页记录数
finalintcurrentPage=PageBean.countCurrentPage(page);
List<JianSheDWBean>list=this.baseDao.queryForPage(hql,offset,length);//"一页"的记录
//把分页信息保存到Bean中
PageBeanpageBean=newPageBean();
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
pageBean.setAllRow(allRow);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
pageBean.init();
returnpageBean;
}
在视图层action中建立分页模型
packagecom.fishing.action.lcq;
importcom.fishing.common.bean.JianSheDWBean;
importcom.fishing.common.bean.PageBean;
importcom.fishing.service.lcq.JianSheDWService;
importcom.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
publicclassGetInfoJSDWListActionextendsActionSupport{
privateintpage;//第几页
privatePageBeanpageBean;//包含分布信息的bean
privateJianSheDWBeanjianSheDWBean;
//privatePageBeanpage;
privateJianSheDWServicejianSheDWService;
publicintgetPage(){
returnpage;
}
publicvoidsetPage(intpage){
this.page=page;
}
publicPageBeangetPageBean(){
returnpageBean;
}
publicvoidsetPageBean(PageBeanpageBean){
this.pageBean=pageBean;
}
publicJianSheDWBeangetJianSheDWBean(){
returnjianSheDWBean;
}
publicvoidsetJianSheDWBean(JianSheDWBeanjianSheDWBean){
this.jianSheDWBean=jianSheDWBean;
}
publicJianSheDWServicegetJianSheDWService(){
returnjianSheDWService;
}
publicvoidsetJianSheDWService(JianSheDWServicejianSheDWService){
this.jianSheDWService=jianSheDWService;
}
@Override
publicStringexecute()throwsException{
//分页的pageBean,参数pageSize表示每页显示记录数,page为当前页
this.pageBean=jianSheDWService.queryForPage(10,page);
returnSUCCESS;
}
}
在jsp中编写分页
<trclass="odd">
<td>
</td>
<td>
<s:iftest="%{pageBean.currentPage==1}">
首页上一页
</s:if>
<s:else>
<ahref="jianguan/getJSDWInfos.action?page=1">首页</a>
<a
href="jianguan/getJSDWInfos.action?page=<s:propertyvalue="%{pageBean.currentPage-1}"/>"/>上一页</a>
</s:else>
</td>
<td>
<s:iftest="%{pageBean.currentPage!=pageBean.totalPage}">
<a
href="jianguan/getJSDWInfos.action?page=<s:propertyvalue="%{pageBean.currentPage+1}"/>">下一页</a>
<a
href="jianguan/getJSDWInfos.action?page=<s:propertyvalue="pageBean.totalPage"/>">尾页
</a>
</s:if>
<s:else>
下一页尾页
</s:else>
</td>
<td>
<divalign="center">
页次
<s:propertyvalue="pageBean.currentPage"/>
/
<s:propertyvalue="pageBean.totalPage"/>
共
<s:propertyvalue="pageBean.allRow"/>
记录
</div>
<divalign="center"></div>
</td>
</tr>
上面只是代码的实现,没有说明配置文件的配置,读者根据情况配置。
希望本文所述对你有所帮助,SSH2实现数据库和界面的分页内容就给大家介绍到这里了。希望大家继续关注我们的网站!想要学习java可以继续关注本站。