一、分页的实现原理
- 得到数据库的总记录为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>
作者:少帅
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文版权归作者所有,欢迎转载,但请保留该声明。