您的位置:首页 > 其它

ssh之雇员管理系统(10)-分页实现

2013-05-16 13:08 447 查看
一、分页的实现原理

得到数据库的总记录为query.list,当前页数pageNow,每页显示多少记录pageSize,一共多少条记录cowPage

分别求出以上的数据,根据以上的数据配置出不同的求法

showListEmp函数用于显示数据库的所有记录,那我们想,他有几个参数呢?pageNow和pageSize,传入两个参数,当前页是在我们点击页面的数字要进入的页面,即根据当前的页和每页显示多少记录来显示记录,那他返回的一定是个集合,这样我们就很好的显示出来啦。

我们知道数据库语句啦,但是如何显示pageSize条记录呢?

public List showListEmp(int pageNow, int pageSize) {
String hql = "from Employee  order by id";//查询所有
return this.executeQueryByPage(hql, null, pageNow, pageSize);
//        return this.executeQuery(hql, null);

}


public List executeQueryByPage(String hql, Object[] parameters,
int pageNow, int pageSize) {
Query query = this.sessionFactory.getCurrentSession().createQuery(hql);
//        System.out.println("query="+query.list());
if (parameters != null && parameters.length > 0) {
for (int i = 0; i < parameters.length; i++) {
query.setParameter(i, parameters[i]);
}
}
//        System.out.println("list="+query.setFirstResult((pageNow-1)*pageSize).list());
//        System.out.println("pageNow="+pageNow+pageSize);
return query.setFirstResult((pageNow-1)*pageSize).setMaxResults(pageSize).list();
}


这里我们让他去调用两外一个公用的函数executeQueryByPage方法,通过query.setFirstResult((pageNow-1)*pageSize).setMaxResults(pageSize).list()来返回list集合。

那我们现在要知道有多少页,才能做分页,现在我们要怎样求得页数呢?

首先countEmp函数用于查找所有的记录数

public int countEmp(int pageSize) {
String hql = "select count(*) from Employee";//查询记录数
return this.queryPageCount(hql, null, pageSize);

}


/**
* 分页查询
*/
public int queryPageCount(String hql, Object[] parameters, int pageSize) {
Object object = this.uniqueQuery(hql, null);
int cowPage = Integer.parseInt(object.toString());
System.out.println("cowPage="+cowPage+"* "+object);
return (cowPage-1)/(pageSize+1);
}


/**
* 查询条数
*/
public Object uniqueQuery(String hql, Object[] parameters) {
Query query = this.sessionFactory.getCurrentSession().createQuery(hql);
if (parameters != null && parameters.length > 0) {
for (int i = 0; i < parameters.length; i++) {
query.setParameter(i, parameters[i]);
}
}
return query.uniqueResult();
}


这样层层嵌套即可查询所需要饿

在action中怎样跳转呢?而且怎样得到当前页面数呢?我们就在页面中当点击一个数时,传入一个数

public ActionForward goListEmp(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
String s_pageNow=request.getParameter("pageNow");
int pageNow=1;
if(s_pageNow!=null){
pageNow=Integer.parseInt(s_pageNow);
}
//        System.out.println("pageNow="+pageNow);

// TODO Auto-generated method stub
request.setAttribute("emplist", employeeServiceInter.showListEmp(pageNow,3));
//测试
int pageCount=employeeServiceInter.countEmp(3);
//        System.out.println("pageCount="+pageCount);
request.setAttribute("pageCount", pageCount);

//打通线路
return mapping.findForward("goListEmp");
}


页面中怎样引用呢?

<c:forEach var="i" begin="1" end="${pageCount}">
<a href="${pageContext.request.contextPath}/employee.do?flag=goListEmp&pageNow=${i }">${i }</a>
</c:forEach>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: