怎样用hibernate实现分页和翻页功能

xiaoxiao2021-02-28  62

/*首先创建一个Page的类*/ package com.niit.page; public class Page { private int totalPage=0;//总的页数 private int totalCount=0;//总的行数 private int currentPage=1;//当前页 private int pageSize=5;//每页显示的数据的行数,可以根据情况自行更改 public int getTotalPage() { if(totalCount%pageSize==0){ totalPage=totalCount/pageSize; }else{ totalPage=totalCount/pageSize+1; } return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } } /*写一个hibernate会话方法*/ package com.niit.dbutil; public class HibernateUtil { private static SessionFactory sf; static{ Configuration cf=new Configuration().configure(); sf=cf.buildSessionFactory(); } public Session openSession(){ return sf.openSession(); } } /*在Dao类中写分页查询数据的方法和获得总行数的方法*/ public class Dao{                1.分页查询数据的方法                           public List<Admin>  selectAdmin(int currentPage,int pageSize){//返回一个List集合,泛型是类Admin List<Admin>  list=null; HibernateUtil hUtil=new HibernateUtil(); Session session=hUtil.openSession();//打开会话 int beginIndex=(currentPage-1)*pageSize;//起始索引 Query query=session.createQuery("from Admin"); query.setFirstResult(beginIndex);//起始索引 query.setMaxResults(pageSize);//显示的数据行数                 /*提示:这里之所以要写起始索引和数据行数,是基于mysql语句:select * from 表名 limit 起始索引,数据行数。*/ list=query.list(); return list; }                 2.获得总行数的方法                 public int getTotalCount(){//获得总的数据的行数 int count=0; HibernateUtil hUtil=new HibernateUtil(); Session session=hUtil.openSession(); List<Admin> list=session.createQuery("from Admin").list(); count=list.size(); return count; } } /*在ListServlet.Java中*/ Dao dao=new Dao(); Page page=new Page(); page.setTotalCount(dao.getTotalCount());//查询总的行数存入page对象,这样就可以算出总的页数 List<Admin>  list=cd.selectAdmin(page.getCurrentPage(),page.getPageSize());//传入参数 request.setAttribute("list", list);//显示数据 request.setAttribute("page", page);//将分页信息存入request,带到界面 request.getServletContext().getRequestDispatcher("/list.jsp").forward(request, response); /*在list.jsp中用循环就可以显示每一页的页码*/  <c:forEach  begin="1" end="${page.totalPage}" var="s">                       <li><a href="ListServlet?currentPage=${s}">${s}</a></li> </c:forEach> 那么怎么实现点击每一页的页码的超链接就自动跳转到想要的页面上去呢? /*在ListServlet中*/ String strPage=request.getParameter("currentPage");//获得点击的页码 int currentPage=0;//定义一个变量 if(strPage==null){//如果是从登录跳转过来的,当前页码是空的 currentPage=1;//默认显示第一页 }else{ currentPage=Integer.parseInt(strPage); } page.setCurrentPage(currentPage);//将当前页存入page对象,这样原来Page方法中的currentPage=1就可以随着我们点击不同页码而改变了 那么怎么实现上一页下一页的功能呢 /*在list.jsp*/ <button type="submit" value="submit"><a href="ListServlet?currentPage=${page.currentPage-1}">上一页</a></button>//如果当前页大于1,就可以往上翻 </c:if> <c:if test="${page.currentPage<=1}"> <button type="submit" value="submit"><a href="ListServlet?currentPage=${page.currentPage}">上一页</a></button>//如果当前页小于等于1,就停留在第一页 </c:if> <c:if test="${page.currentPage<page.totalPage}"> <button type="submit" value="submit"><a href="EmpServlet?currentPage=${page.currentPage+1}">下一页</a></button>//如果当前页小于最后一页,就可以往下翻 </c:if> <c:if test="${page.currentPage>=page.totalPage}"> <button type="submit" value="submit"><a href="EmpServlet?currentPage=${page.currentPage}">下一页</a></button>如果当前页大于等于最后一页,就停留在最后一页 </c:if> 以上就是我的一点点小的实践总结,希望能对你有帮助!
转载请注明原文地址: https://www.6miu.com/read-55880.html

最新回复(0)