hibernate实现分页查询
具体思路
通过Hibernate实现分页查询,
开发人员只需要提供HQL语句(调用Session的createQuery()方法)
或查询条件(调用Session的createCriteria()方法)、
设置查询起始行数(调用Query或Criteria接口的setFirstResult()方法)
和最大查询行数(调用Query或Criteria接口的setMaxResults()方法)
并调用Query或Criteria接口的list()方法,Hibernate会自动生成分页查询的SQL语句。
第一我们需要一个定义页面的类
public class Page {
9 /**
10 * 其中currentPage,perPageRows这两个参数是做分页查询必须具备的参数
11 * 原因是:hibernate中的Criteria或则是Query这两个接口:都有setFirstResult(Integer firstResult)
12 * 和setMaxResult(Integer maxResult),
13 * 这里的firstResult就是每页的开始的索引数:
14 * 每页开始的索引数的计算公式是:(currentPage-1)*perPageRows+1,(这是相对索引从1开始的)
15 * 但是Hibernate中的firstResult的索引是从0开始的,所以在hibernate中每页开始的索引数的计算公式是:
16 * (currentPage-1)*perPageRows+1-1=(currentPge-1)*perPageRows.
17 *
18 * maxResult就是每页能查询的最大记录数:也就是perPageRows.
19 *
20 * Math.ceil(totalRows/perPageRows)==totalPages;//这是根据总记录数和每页的记录数算出总页数的计算公式。
21 */
22 private Integer currentPage;//当前页
23 private Integer perPageRows;//每页的记录数
24 private Integer totalRows;//总记录数:
25 private Integer totalPages;//总页数:
26 public Integer getCurrentPage() {
27 return currentPage;
28 }
29
30 public void setCurrentPage(Integer currentPage) {
31 this.currentPage = currentPage;
32 }
33
34 public Integer getPerPageRows() {
35 return perPageRows;
36 }
37
38 public void setPerPageRows(Intege