你的位置:首页 > Java教程

[Java教程]Java分页查询

  当数据库中数据条数过多时,一个页面就不能显示,这是要设置分页查询,首先要使用的是数据库sql语句的limit条件实现分组查询
sql语句大概形式为:
  select * from table limit 开始索引,显示条数
  用该语句就会实现分块查询,并且每页显示固定条数。
首先要实现后台分页,我们需要知道它有多少页,每页有多少行,这就需要知道一共多少行,调用sql语句时还需要知道每一页的开始索引,开始索引是根据当前页数算出来的,所以还需要知道当前页数,查询后会返回一个列表存储当前页数据。将这些属性及获取设置的方法封装成一个类就有了下面的page类:

 1 public class Page<T> { 2   private List<T> data;//数据列表 3   private int pagenum;//当前页数 4   private int pagesize;//当前页显示条数 5   private int rows;//总行数 6   public Page(int rows,int pagenum, int pagesize) { 7     super(); 8     data=new ArrayList<>(); 9     this.rows=rows;10     this.setPagesize(pagesize);11     this.setPagenum(pagenum);    12   }13   public Page() {14     super();15   }16   public int getPagenum() {17     return pagenum;18   }19   public void setPagenum(int pagenum) {20     if(pagenum>getTotalpage())21     {22       this.pagenum=getTotalpage();23     }24     else {25       this.pagenum = pagenum;26     }  27     if(pagenum<1)28     {29       this.pagenum=1;30     }31   }32   public int getPagesize() {33     return pagesize;34   }35   public void setPagesize(int pagesize) {36     this.pagesize = pagesize;37   }38   public int getTotalpage() {39     //计算总页数40     if(rows%pagesize==0)41     {42       return rows/pagesize;43     }44     else {45       return rows/pagesize+1;46     }    47   }48   public int getRows() {49     return rows;50   }51   public void setRows(int rows) {52     this.rows = rows;53   }54   public int getIndexnum() {55     //获取索引值56     return pagesize*(pagenum-1);57   }58   public List<T> getData() {59     return data;60   }61   public void setData(List<T> data) {62     this.data = data;63   }64 }
Page类

初始化时我们只需要获得数据总条数,页数及每页显示条数。数据总条数可以用sql语句select count(*)from table 获得。每次查询时只需要传入当前页数就可以了。将每次查询后的page对象传入jsp前台页面,并以一个div来显示

 1 <div> 2     <a href="http://www.cnblogs.com//stuent8.11/stuServlet?pagenum=1">首页</a> 3     <a href="http://www.cnblogs.com//stuent8.11/stuServlet?pagenum=${apage.pagenum-1 }">上一页</a> 4     <c:choose> 5       <c:when test="${apage.totalpage<=5 }"> 6         <c:set var="begin" value="1"></c:set> 7         <c:set var="end" value="${apage.totalpage }"></c:set> 8       </c:when> 9       <c:when test="${apage.totalpage>5 }">10         <c:set var="begin" value="1"></c:set>11         <c:set var="end" value="5"></c:set>12         <c:if test="${apage.pagenum>3 }">13           <c:set var="begin" value="${apage.pagenum-2 }"></c:set>14           <c:set var="end" value="${apage.pagenum+2 }"></c:set>15         </c:if>16         <c:if test="${end>apage.totalpage }">17           <c:set var="begin" value="${apage.totalpage-4 }"></c:set>18           <c:set var="end" value="${apage.totalpage }"></c:set>19         </c:if>20       </c:when>21     </c:choose>22     <c:forEach begin="${begin }" end="${end }" step="1" var="num">23       <c:if test="${apage.pagenum==num }">24         [${num }]25       </c:if>26       <c:if test="${apage.pagenum!=num }">27         <a href="http://www.cnblogs.com//stuent8.11/stuServlet?pagenum=${num }">${num }</a>  28       </c:if>29     </c:forEach>30     <a href="http://www.cnblogs.com//stuent8.11/stuServlet?pagenum=${apage.pagenum+1 }">下一页</a>31     <a href="http://www.cnblogs.com//stuent8.11/stuServlet?pagenum=${apage.totalpage }">末页</a>32   </div>
显示div

其中的一个choose是用于规定页面显示的最大页数,这里是5页,就是说当点到第4页是时,第1页就会消失,出现第6页。