PageBean需要的属性
在web开发中, 由于前端的数据常常需要分页展示, 所以需要后端封装用于分页查询的PageBean对象. 前端只需要传入当前要查询第几页, 以及每页显示数据条数即可.
PageBean需要5个属性
(1).当前页 currentPage
(2).每页显示条数 pageCount
(3).总条数 totalCount
(4).总页数 totalPage
(5).查询的数据集合 list
PageBean其它注意的地方
(1).如果当前页 currentPage 传来的参数为空, 就默认查询第1页; 如果每页显示条数 pageCount 传来的参数为空, 那就默认每页5条数据.
(2).如果当前页 currentPage 传来的参数小于1, 则默认查询第1页; 如果 currentPage 大于总页数, 则默认查询最后一页.
(3).由于需要分页查询, 为了方便, 可以将limit的起始参数start提供出来, start = (当前页 - 1) * 每页条数.
(4).根据数据总条数 totalCount, 和每页显示条数 pageCount计算总页数, 下面是总页数计算的两种方式:
//方式1: 使用Math.ceil()天花板方法
// 获取总页数
this.totalPage = (int) Math.ceil(1.0 * this.totalCount / this.pageCount);
//方式2: 使用整除方法
//总条数+每页条数-1, 这样, 即使最后一页只有一条数据, 也会新开一页
this.totalPage = (this.totalCount + this.pageCount - 1) / this.pageSize;
PageBean代码
package com.tukrin.utils;
import java.util.List;
/**
* PageBean封装
* @author aisi
*
*/
public class PageBean {
/**
* 当前页
*/
private Integer currentPage;
/**
* 每页显示条数
*/
private Integer pageCount;
/**
* 总条数
*/
private Integer totalCount;
/**
* 总页数
*/
private Integer totalPage;
/**
* 分页查询的数据
*/
private List list;
public PageBean(Integer currentPage, Integer pageCount, Integer totalCount) {
this.currentPage = currentPage;
this.pageCount = pageCount;
this.totalCount = totalCount;
// 如果没有指定当前查哪页, 则默认查第1页
if(currentPage == null){
this.currentPage = 1;
}
// 如果没有指定每页多少条数据, 则默认为5条
if(pageCount == null){
this.pageCount = 5;
}
// 获取总页数
this.totalPage = (int) Math.ceil(1.0 * this.totalCount / this.pageCount);
// 当前页不能小于1
if(this.currentPage < 1){
this.currentPage = 1;
}
// 当前页不能大于总页数
if(this.currentPage > this.totalPage && this.totalPage != 0){
this.currentPage = this.totalPage;
}
}
/**
* 获取分页查询的起始参数
* @return
*/
public int getStart(){
return (this.currentPage - 1) * this.pageCount;
}
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getPageCount() {
return pageCount;
}
public void setPageCount(Integer pageCount) {
this.pageCount = pageCount;
}
public Integer getTotalCount() {
return totalCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
}
这样, 查询数据时, 不需要直接返回数据的集合, 而是返回PageBean对象, 数据的集合已经封装到pageBean对象了.
web层传参
web层只需要传当前页currentPage, 每页显示条数pageCount即可, 如果不传, 系统会默认查询第1页, 每页显示5条数据
service层业务
需要调用dao层, 查询数据总条数, 然后调用有参构造(currentPage当前页, pageCount每页条数, totalCount总条数)创建PageBean实例, 这样就可以获取分页查询的两个参数pageBean.getStart(), pageBean.getPageCount(), 分页查询获取数据的list集合, 传给PageBean, 最后返回PageBean对象.
@Override
public PageBean getData(Long startTime, Long endTime, String deviceId, Integer currentPage, Integer pageCount) throws Exception {
// 获取总条数
Integer totalCount = faceCaptureDao.getTotalCount();
PageBean pageBean = new PageBean(currentPage, pageCount, totalCount);
List<FaceCapture> faceCaptureList = faceCaptureDao.findByTimeDesc(startTime, endTime, deviceId, pageBean.getStart(), pageBean.getPageCount());
pageBean.setList(faceCaptureList);
return pageBean;
}
测试结果
返回的数据结构如下
{"currentPage":30,"list":[{},{},{},{},{}],"pageCount":5,"start":145,"totalCount":12345,"totalPage":2469}