ssh之雇员管理系统(10)-分页实现
一、分页的实现原理
- 得到数据库的总记录为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>
作者:少帅
出处:少帅的博客--http://www.cnblogs.com/wang3680
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文版权归作者所有,欢迎转载,但请保留该声明。
![](https://images.cnblogs.com/cnblogs_com/wang3680/1880988/o_201113031241%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201113111211.jpg)
![](https://images.cnblogs.com/cnblogs_com/wang3680/1881010/o_201113034037%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201113113928.png)