hibernate--分页

本文介绍了一个基于Hibernate的分页实现方案,包括自定义分页类、在ACTION中调用分页类以及页面上的分页显示。该方案通过计算当前页码、记录数等参数来动态加载指定页的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三步:

1,写分页类

2,ACTION里调分页类

3,页面显示分页

---------------------------------------1,写分页类

/**
  * findPageResult
  * @此方法描述的是:Hibernate分页
  * @param request 
  * @param HQL
  * @param num 页面要要显示的页数
  * @param maxResults 每页要显示多少行
  * @param currentResult 首页的显示的末记录
  * @return
  * List
  */
 protected List findPageResult(HttpServletRequest request,String HQL, int num, int maxResults, int currentResult){
  this.log.debug("BasicAction--->findPageResult--->start:");
  String pageFlag = request.getParameter("pageFlag");    //标志位,(下一页,上一页,最后一页,首页,跳转)
  int rows;                 //总行数
  int pages;              //总页数
  //int maxResults = 5;           //每页显示的行数
  int currentPage = 1;           //当前页数
  int startPage = 1;            //要显示的起始页
  int endPage = 1;            //要显示的最后一页
  int firstResult = 0;           //当前页首记录index
  //int currentResult = 5;          //当前页末记录index
  
  String currentPageTemp = request.getParameter("currentPages");  //获得当前页
  if(!this.trimnull(currentPageTemp).equals("")){
   currentPage = new Integer(currentPageTemp).intValue();
  }
  
  String firstResultTemp = request.getParameter("firstResults");  //获得当前页的首记录
  if(!this.trimnull(firstResultTemp).equals("")){
   firstResult = new Integer(firstResultTemp).intValue();
  }
  
  //初始化sessionFactory
  SessionFactory sessionFactory = (SessionFactory) BeanHelp.getBean("sessionFactory");
  Session session = sessionFactory.openSession();
  
  
  String rowsTemp = request.getParameter("rows");     //获得总行数
  if(!this.trimnull(rowsTemp).equals("") && !"0".equals(rowsTemp)){//如果总行数不为零或不为空的时候转化为整数,否则为第一次计算
   rows = new Integer(rowsTemp).intValue();
  }else{               //第一次计算
   String HQL_rows = "select count(*) " + HQL.substring(HQL.indexOf("from"));
   this.log.debug("HQL_rows="+HQL_rows);
   rows = ((Integer)(session.createQuery(HQL_rows).list().get(0))).intValue();//第一次计算得到总行数
  }
  this.log.debug("rows="+rows);
  
  String pagesTemp = request.getParameter("pages");
  if(!this.trimnull(pagesTemp).equals("") && !"0".equals(pagesTemp)){//如果总页数不为零或不为空的时候转化为整数,否则为第一次计算
   pages = new Integer(pagesTemp).intValue();
  }else if(rows == 0){
   pages = 0;    //总页数
   maxResults = 0;   //每页显示的行数
   currentPage = 0;   //当前页
   firstResult = 0;  //当前页的首记录
   currentResult = 0;  //当前页的末记录
  }else{
   pages = rows/maxResults; //总行数除以每页显示的最大结果数表示为总页数
   firstResult = 1;
   if(pages < 1) {   
    currentResult = rows;//如果当前的结果大于1时,看是否有余数,如果有总页数加1
   }
   if(rows%maxResults>0){
    pages++;
   }
  }
  
  
  
  
  if(pages<num&&pages>=1) {        //如果总页数小于9时
   endPage = pages;        //这个页最后显示的页数为 pages
   currentPage = currentPage;      //当前页为1
   startPage = 1;         //起始页为1
   pages = pages;         //总页数
  }else if(pages>9){         //如果总页数大于9
   if(currentPage-num/2<1) {       //如果当前页-8<1
    endPage = num;        //这个页最后显示的页数为 pages
    currentPage = currentPage;     //当前页为1
    startPage = 1;        //起始页为1
    pages = pages;        //总页数
   }else if (currentPage+num/2>pages){     //如果当前页+4<page
    endPage = pages;       //这个页最后显示的页数为 pages
    currentPage = currentPage;     //当前页为1
    startPage = pages-num-1;      //起始页为1
    pages = pages;        //总页数
   }else{
    endPage = currentPage+num/2;     //这个页最后显示的页数为 pages
    currentPage = currentPage;     //当前页为1
    startPage = currentPage-num/2;     //起始页为1
    pages = pages;
   }
  }else{
   pages = pages;         //这个页的最后显示的页数为 pages
   endPage = 0;         //这个页最后显示的页数为 pages
   currentPage = 0;        //当前页为1
   startPage = 1;

  }
  
  if(pageFlag==null){
   //
  }else if(pageFlag.equals("first")){     //首页
   currentPage = 1;        //当前页为1
   firstResult = 1;        //首记录为1
   if(rows/maxResults >1) {      //总行数/每页显示的最大结果数大于1
    currentResult = maxResults;     //当前页的麽记录=每页显示的最大结果数
   } else {          //总行数/每页显示的最大结果数小于1
    currentResult = rows%maxResults;   //当前页的麽记录=总行数/每页要显示最大结果的余数
   }
  }else if(pageFlag.equals("last")){     //末页
   firstResult = (pages-1)*maxResults;    //当前页的首记录=总页数减一乘以每页要显示的最大结果数
   currentPage = pages;       //当前页就等于总页数
   currentResult = rows;       //当前页的麽记录=总行数
  }else if(pageFlag.equals("next")){     //下一页
   currentPage = currentPage + 1;     //当前页加以
   firstResult = firstResult+maxResults;   //当前页的首记录 = 上一页的首记录+每页显示的最大结果
   if(pages > currentPage) {      //如果总页数大于当前页
    currentResult = firstResult + maxResults - 1; //当前页的麽记录 = 当前页的首记录+每页显示的最大结果
   } else {          //负责
    if(rows%maxResults==0) {
     currentResult = rows;     //当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
    }else{
     currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
    }
   }
  }else if(pageFlag.equals("before")){    //上一页
   currentResult = firstResult-1;     //当前页的麽记录 = 上一页的首记录
   firstResult = firstResult - maxResults;   //当前页的首记录 = 上一页的首记录 - 每页显示的最大结果数
   currentPage--;
  }else if(pageFlag.equals("changePage")){   //跳页
   firstResult = (currentPage-1)*maxResults+1;  //当前页的首记录 = (当前页-1)*每要显示的最大结果数
   if(pages > currentPage) {      //如果总页数大于当前页
    currentResult = firstResult + maxResults-1; //当前页的麽记录 = 当前页的首记录 + 每页显示的最大结果数
   } else {
    //currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
    if(rows%maxResults==0) {
     currentResult = firstResult+maxResults-1;     //当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
    }else{
     currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
    }
   }
   
  }
  
  
  List list = session.createQuery(HQL).setFirstResult(firstResult-1).setMaxResults(maxResults).list();
  session.close();
  
  request.setAttribute("rows",rows);     //总行数
  request.setAttribute("pages",pages);    //总页数
  request.setAttribute("currentPages",currentPage); //当前页
  request.setAttribute("maxResults",maxResults);  //当前显示的行数
  request.setAttribute("firstResults",firstResult); //当前页的首记录
  request.setAttribute("currentResults",currentResult);//当前页的末记录
  request.setAttribute("endPages",endPage);   //当前页显示的最后页数
  request.setAttribute("startPages",startPage);  //当前页显示的起始页数
  System.out.println("rows==========="+rows);
  System.out.println("pages==========="+pages);
  System.out.println("maxResults==========="+maxResults);
  System.out.println("firstResult==========="+firstResult);
  System.out.println("currentResult==========="+currentResult);
  System.out.println("startPage==========="+startPage);
  System.out.println("currentPages==========="+currentPage);
  System.out.println("endPages==========="+endPage);
  return list;
 }
 
 public String trimnull(String src){
  if(src==null||src.equalsIgnoreCase("null")){
   return "";
  }
  return src.trim();
 }
-----------------------------------------action页面调用分页

String sql="from product "

 List marketList = this.findPageResult(request,sql,10,10,10);
     request.setAttribute("marketInfos", marketList);
    return mapping.findForward("verifyMain");

------------------------------------------页面显示


      <script>
       function pagesClick(indexes) {//取页数:123456
       var rows = document.getElementById("rows").value;
            var pages = document.getElementById("pages").value;
            var firstResults = document.getElementById("firstResults").value;
            document.peform.action="/admin/verify.do?method=queryList&currentPages="+indexes+"&rows="+rows+"&pages="+pages+"&firstResults="+firstResults+"&pageFlag=changePage";
       document.peform.submit();
               }
      </script>
      <div class="page">
       <form action="verify.do?method=selectType" name="peform"
        method="post">
        <div style="text-align:right">
         共 ${pages} 页 ${rows } 条 本页显示 ${firstResults}-${currentResults}条
         <br />
         <span>
         <a href="javascript:upPage()">上一页</a>
         <c:forEach begin="${startPages}" end="${endPages}" step="1" var="indexes">
                 <span  id="sp${indexes}">
                
                 <a href="javascript:pagesClick(${indexes})">
                  <c:if test="${currentPages==indexes}"><font color="red"></c:if>
                        <c:if test="${currentPages!=indexes}"><font color="black"></c:if>
                 ${indexes}</font>
                 </a>
           </span>           
         </c:forEach>
         <a href="javascript:nextPage()">下一页</a> 到第 <input name="jumppages" id="jumppages" type="text" value="${currentPages}" size="1" /> 页 <input type="button"
           value="确认" onclick="jumpPage()" /> </span>
          </div>
        <div class="clear"></div>
        <input type="hidden" id="rows" name="rows" value="${rows}" />
        <!-- 总记录数 -->
        <input type="hidden" id="pages" name="pages" value="${pages}" />
        <!-- 总页数 -->
        <input type="hidden" id="currentPages" name="currentPages"
         value="${currentPages}" />
        <!-- 当前页 -->
        <input type="hidden" id="maxResults" name="maxResults"
         value="${maxResults}" />
        <!-- 每页显示的记录数 -->
        <input type="hidden" id="firstResults" name="firstResults"
         value="${firstResults}" />
        <!-- 当前页的第一条记录 -->
        <input type="hidden" id="currentResults" name="currentResults"
         value="${currentResults}" />
        <!-- 当前页的最后一条记录 -->
        <input type="hidden" id="endPages" name="endPages"
         value="${endPages}" />
        <!-- 要显示的最后一页 -->
        <input type="hidden" id="startPages" name="startPages"
         value="${startPages}" />
        <!-- 要显示的起始页 -->
        <script type="text/javascript">
               //--------------------------------- 上一页    
          function upPage(){
                 var rows = document.getElementById("rows").value;
                 var pages = document.getElementById("pages").value;
                 var currentPages = document.getElementById("currentPages").value;
                 var maxResults = document.getElementById("maxResults").value;
                 var firstResults = document.getElementById("firstResults").value;
                 var currentResults = document.getElementById("currentResults").value;
                 var endPages = document.getElementById("endPages").value;
                 var startPages = document.getElementById("startPages").value;
                 if(currentPages==1) {
                  alert("已经是第一页");
                  return;
                 }else{
                  document.peform.action="/admin/verify.do?method=queryList&currentPages="+currentPages+"&rows="+rows+"&pages="+pages+"&firstResults="+firstResults+"&pageFlag=before";
             document.peform.submit();
                 }
               }
          //--------------------------------- 下一页      
               function nextPage(){
                 var rows = document.getElementById("rows").value;
                 var pages = document.getElementById("pages").value;
                 var currentPages = document.getElementById("currentPages").value;
                 var maxResults = document.getElementById("maxResults").value;
                 var firstResults = document.getElementById("firstResults").value;
                 var currentResults = document.getElementById("currentResults").value;
                 var endPages = document.getElementById("endPages").value;
                 var startPages = document.getElementById("startPages").value;
                 if(currentPages==pages) {
                  alert("已经是最后一页");
                  return;
                 }else{
                  document.peform.action="/admin/verify.do?method=queryList&currentPages="+currentPages+"&rows="+rows+"&pages="+pages+"&firstResults="+firstResults+"&pageFlag=next";
             document.peform.submit();
                 }
               }
          //--------------------------------- 跳页     
               function jumpPage(){
                 var rows = document.getElementById("rows").value;
                 var pages = document.getElementById("pages").value;
                 var currentPages = document.getElementById("currentPages").value;
                 var maxResults = document.getElementById("maxResults").value;
                 var firstResults = document.getElementById("firstResults").value;
                 var currentResults = document.getElementById("currentResults").value;
                 var endPages = document.getElementById("endPages").value;
                 var startPages = document.getElementById("startPages").value;
                 var jumppages = document.getElementById("jumppages").value;
                 if(jumppages==currentPages) {
                  alert("这是当前页");
                  return false;
                 }else if(jumppages<1) {
                  alert("超过页数的范围");
                  return false;
                 }else if(parseInt(jumppages)>parseInt(pages)) {
                  alert("超过页数的范围");
                  return false;
                 }else{
                  document.peform.action="/admin/verify.do?method=queryList&currentPages="+jumppages+"&rows="+rows+"&pages="+pages+"&firstResults="+firstResults+"&pageFlag=changePage";
             document.peform.submit();
                 }
               }
 
                                  </script>
      </div>
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值