时间过的真快呀,感觉不到的就又要上班了。今天是08年的第一天班在这里给大家拜个晚年。
今天来写写在项目中应用到的分页算法来和大家讨论讨论。
在这里主要实现的是模糊查询分页。
要分页当然要有一个记录页面信息的bean了下面是这写的一个bean
package com.huiyaa.businessweb.util;
public class Page {
private int nowPageNo = 1;// 当前的页号
private int totalPage;// 总页数
private int firstResult = 0;// 查询的起始位置
private int maxResults = 10;// 最大的结果集,每一页有多少记录
private int count;// 总记录数
private int[] pageNo;// 存放所有的页号
public int getNowPageNo() {
return nowPageNo;
}
public void setNowPageNo(int nowPageNo) {
this.nowPageNo = nowPageNo;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
/**
* 计算一共有多少页,即总的页数
* @param conut
* @param maxResults
*/
public void setTotalPage(int conut, int maxResults) {
int totalPage = 0;
if (maxResults % 2 == 0) {
if (count % 2 == 0) {
totalPage = count / maxResults;
} else {
totalPage = count / maxResults + 1;
}
setTotalPage(totalPage);
}else{
if (count % 2 == 0) {
totalPage = count / maxResults - 1;
} else {
totalPage = count / maxResults;
}
setTotalPage(totalPage);
}
}
public int getFirstResult() {
return firstResult;
}
public void setFirstResult(int firstResult) {
this.firstResult = firstResult;
}
public int getMaxResults() {
return maxResults;
}
public void setMaxResults(int maxResults) {
this.maxResults = maxResults;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int[] getPageNo() {
return pageNo;
}
public void setPageNo(int[] pageNo) {
this.pageNo = pageNo;
}
/**
* 要据总的页数来计算出页号,并将所有的页码放在一个int[]里
* 数组的大小为传入的总页数
* @param totalPage
*/
public void setPageNo(int totalPage) {
int[] pageNoes = new int[totalPage];
for (int i = 1; i <= totalPage; i++) {
int j = i;
pageNoes[i - 1] = j;
}
setPageNo(pageNoes);
}
}
要分页当然是dao层的事了,不过在数据量小的情况下也可以直接在页面中分。下面就是我的dao层的分页的实现
public List<Hospital> getHospitalByAddressKey(String hospitalAddressKey,
int maxResults) {
log.debug("���根据医院地址关键字搜索相匹配的所有医院Ժ");
List<Hospital> hospitals = null;
hospitals = getSession().createCriteria(Hospital.class).add(
Restrictions.like("hospitalAddress", "%" + hospitalAddressKey
+ "%")).setFirstResult(
(page.getNowPageNo() - 1) * maxResults).setMaxResults(
page.getMaxResults()).list();
return hospitals;
}
在这里用的是hibernate中的条件查询。
在此之前当然要先得到所要分页的记录的总数,我将这个些方法放封装到一个类里,当然也是在dao了。也提供相的接口。下面就是这个方法。
package com.huiyaa.businessweb.dao.imp;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.huiyaa.businessweb.dao.PagintionInterface;
public class PagintionInterfaceImpl extends HibernateDaoSupport implements PagintionInterface {
/**
* 根据搜索关键字和搜索选项来得到要搜索的内容的总的记录数
* @param searchKey
* @param searchOption
* @return int
*/
public int getCount(String searchKey, String searchOption) {
int count = 0;
if (searchOption.equalsIgnoreCase("byHospitalAddress")) {
String hql = "from Hospital hospital where hospital.hospitalAddress like :address";
count = getHibernateTemplate().findByNamedParam(hql, "address",
"%" + searchKey + "%").size();
return count;
}
if (searchOption.equalsIgnoreCase("byHospitalName")) {
String hql = "from Hospital hospital where hospital.hospitalName like :name";
count = getHibernateTemplate().findByNamedParam(hql, "name",
"%" + searchKey + "%").size();
return count;
}
return count;
}
}
这些工作做好之后就是怎样用struts去调用了。
首先在最初调用的action中来对页面bean进行数值初始化。具体如下
page.setCount(yLService.getCount(searchKey, searchOption));
int count = page.getCount();
page.setTotalPage(count, page.getMaxResults());
page.setPageNo(page.getTotalPage());
int[] pageNoes = page.getPageNo();
request.getSession().setAttribute("pageNoes", pageNoes);
这一步做好之后我们就可以在结果页面上来显示面号和相应的内容了,如下
<logic:notEmpty name="hospitals" scope="request">
<p align="center" class="css">
<logic:iterate id="pageNo" name="pageNoes" indexId="index"
scope="session">
<html:link action="pagintion" paramId="nowPageNo" paramName="pageNo">
<bean:write name="pageNo"/>
</html:link>
</logic:iterate>
</p>
</logic:notEmpty>
当我们点击一个页码时,要将当前面码作为一个参数传到一个辅助的action中去。再将当前页码保存到页面bean中,以便于有这来计算FirstResult。这个action如下
public class PagintionAction extends Action {
private Page page;
private YLServiceInterface yLService;
public void setPage(Page page) {
this.page = page;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String searchOption = (String) request.getSession().getAttribute(
"searchOption");
String searchKey = (String) request.getSession().getAttribute(
"searchKey");
int nowPageNo = Integer.valueOf(request.getParameter("nowPageNo"));
page.setNowPageNo(nowPageNo);
System.out.println("NOWPAGENO = :" + page.getNowPageNo());
List<Hospital> hospitals = null;
if (searchOption.equalsIgnoreCase("byHospitalAddress")) {
hospitals = yLService.getHospitalByAddressKey(searchKey, page
.getMaxResults());
request.setAttribute("hospitals", hospitals);
return mapping.findForward("searchList");
}
if (searchOption.equalsIgnoreCase("byHospitalName")) {
hospitals = yLService.getHospitalByNameKey(searchKey, page
.getMaxResults());
request.setAttribute("hospitals", hospitals);
System.out.println("HOSPITAL OK");
return mapping.findForward("searchList");
}
if (searchOption.equalsIgnoreCase("byIllName")) {
hospitals = yLService.getHospitalByIll(searchKey, page
.getMaxResults());
request.setAttribute("hospitals", hospitals);
return mapping.findForward("searchList");
}
return null;
}
public void setYLService(YLServiceInterface service) {
yLService = service;
}
}
OK,这样一个简单的分页就算完成,如果您还有什么更好,更调高效的算法的话请不吝赐教。
分享到:
相关推荐
IT项目经理成长手记IT项目经理成长手记IT项目经理成长手记IT项目经理成长手记IT项目经理成长手记
### Android开发手记一_NDK编程实例 #### 一、开发环境的搭建 在开始具体的NDK编程之前,首先需要确保开发环境已经被正确地搭建起来。对于初次接触Android NDK开发的朋友来说,拥有一个良好的环境配置是至关重要的...
IT项目经理成长手记PDF 潘东_韩秋泉著 来自项目第一线的管理经验和实用工具 机械工业出版社 2013年1月第1次印刷 完整版,含全部书签目录 非常不错的资源 整本书以亲身经历的故事穿插理论知识的写法,很容易让人...
IT项目经理成长手记PDF,非常不错的资源
《IT项目经理成长手记》是一本专为那些渴望在信息技术领域中担任项目经理角色的人们精心编写的指南。这本书深入探讨了IT项目管理的核心概念、关键技能以及实际操作中的经验教训,旨在帮助读者从新手到专家逐步提升...
开发网页看 网页开发手记 htmlcss js 大家可以看看
IT项目 经理成长手记 kindle电子书 IT项目 经理成长手记 kindle电子书
一本描述网页开发的书,很全,希望大家能喜欢
网页开发手记htmlcssjavascript实战详解 电子工业出版社 叶青 孙亚南 孙泽军编著
本资料“网页开发手记:486个JavaScript网页特效详解”正是针对这一主题进行深入探讨的资源,包含了大量实用的JavaScript特效代码实例。 首先,我们要理解JavaScript的基本概念。JavaScript是一种解释型的、基于...
《网页开发手记:HTML+CSS+JavaScript实战详解》是一本专门为初学者设计的Web前端技术教程,旨在帮助读者深入理解和掌握网页开发的核心技术。这本书的内容涵盖了HTML、CSS和JavaScript这三个网页开发的基础和核心...
P道理 ERP项目实施手记北京市:清华大学出版社_2011.10_童继龙,童继明著的pdf文档,共享,欢迎下载
项目管理实践经验; 行文特点通俗直接,脉络清晰; 大量的图标,易懂。
《网页开发手记--实战详解》由叶青、孙亚南、孙泽军编著,笔者将网页制作技术粗略划分为前台浏览器端技术和后台服务器端技术。本书主要学习前台浏览器端技术,也就是静态页面制作技术。早期只需要使用HTML即可单独...
同人游戏开发手记-附件(2.2.2-2.2.6) 具体说明见我的博客(http://blog.csdn.net/fosly) 一如既往的骗5个积分, 积分不够的请留个Email, C屌相信总会有不缺分儿的人出现的, 所以坚决不免分
总的来说,《IT项目经理成长手记 潘东》是一本结合理论与实践经验的优秀读物,无论是初入职场的新人还是经验丰富的项目经理,都能从中受益。通过阅读这本书,读者不仅可以提升项目管理的专业知识,还能培养出应对...
《IT项目经理成长手记》是一本专为IT行业项目经理及有志于此领域发展的专业人士准备的实战指南。本书通过虚拟人物小M的成长经历,系统性地讲述了项目管理的实践技巧和经验教训,旨在帮助读者理解并掌握项目管理的...
### JFreeChart 开发手记(一):完整柱状图及数据下钻实现方法 #### 1. 概述 本文档旨在介绍如何利用开源图表库 JFreeChart 制作一个完整的柱状图,并实现商业智能 (BI) 软件中常见的“数据下钻”功能。通过本...