Java--mysql实现分页查询--分页显⽰
  当数据库中数据条数过多时,⼀个页⾯就不能显⽰,这是要设置分页查询,⾸先要使⽤的是数据库sql语句的limit条件实现分组查询sql语句⼤概形式为:
  select * from table limit 开始索引,显⽰条数
  ⽤该语句就会实现分块查询,并且每页显⽰固定条数。
  (由于limit是mysql特有的,如果是Oracle数据库的话就需要通过rownum来限制⽐如:select * from table where rownum >=开始索引。如果是sql sever数据库的话可以⽤到top关键字,如取m到n条数据:select top (n-m+1) id from table where id not in (select top m-
1 id from table))
⾸先要实现后台分页,我们需要知道它有多少页,每页有多少⾏,这就需要知道⼀共多少⾏,调⽤sql语句时还需要知道每⼀页的开始索引,开始索引是根据当前页数算出来的,所以还需要知道当前页数,查询后会返回⼀个列表存储当前页数据。将这些属性及获取设置的⽅法封装成⼀个类就有了下⾯的page类:
1public class Page<T> {
2private List<T> data;//数据列表
3private int pagenum;//当前页数
4private int pagesize;//当前页显⽰条数
5private int rows;//总⾏数
6public Page(int rows,int pagenum, int pagesize) {
7super();
8        data=new ArrayList<>();
10this.setPagesize(pagesize);
11this.setPagenum(pagenum);
12    }
13public Page() {
14super();
15    }
16public int getPagenum() {
17return pagenum;
18    }
19public void setPagenum(int pagenum) {
20if(pagenum>getTotalpage())
21        {
22this.pagenum=getTotalpage();
23        }
24else {
25this.pagenum = pagenum;
26        }
27if(pagenum<1)
28        {
29this.pagenum=1;
30        }
31    }
32public int getPagesize() {
33return pagesize;
34    }
35public void setPagesize(int pagesize) {
36this.pagesize = pagesize;
37    }
38public int getTotalpage() {
39//计算总页数
40if(rows%pagesize==0)
41        {
42return rows/pagesize;
43        }
44else {
45return rows/pagesize+1;
46        }
47    }
48public int getRows() {
49return rows;
50    }
51public void setRows(int rows) {
53    }
54public int getIndexnum() {分页预览
55//获取索引值
56return pagesize*(pagenum-1);
57    }
58public List<T> getData() {
59return data;
60    }
61public void setData(List<T> data) {
62this.data = data;
63    }
64 }
Page类
初始化时我们只需要获得数据总条数,页数及每页显⽰条数。数据总条数可以⽤sql语句select count(*)
from table 获得。每次查询时只需要传⼊当前页数就可以了。将每次查询后的page对象传⼊jsp前台页⾯,并以⼀个div来显⽰
1<div>
2<a href="/stuent8.11/stuServlet?pagenum=1">⾸页</a>
3<a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum-1 }">上⼀页</a>
4<c:choose>
5<c:when test="${alpage<=5 }">
6<c:set var="begin" value="1"></c:set>
7<c:set var="end" value="${alpage }"></c:set>
8</c:when>
9<c:when test="${alpage>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&alpage }">
17<c:set var="begin" value="${alpage-4 }"></c:set>
18<c:set var="end" value="${alpage }"></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="/stuent8.11/stuServlet?pagenum=${num }">${num }</a>
28</c:if>
29</c:forEach>
30<a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum+1 }">下⼀页</a>
31<a href="/stuent8.11/stuServlet?pagenum=${alpage }">末页</a>
32</div>
显⽰div
其中的⼀个choose是⽤于规定页⾯显⽰的最⼤页数,这⾥是5页,就是说当点到第4页时,第1页就会消失,出现第6页。