普通分页查询逻辑

编程

分页查询" title="分页查询">分页查询

大多数的 web 应用中由于数据量庞大,一般不会将所有数据都同时展示在一个页面上,而应对庞大的数据展示,分页查询无疑是一个比较科学的解决办法


数据传递

要想理清分页的逻辑,首先得要知道在分页查询的过程中,客户端(浏览器)向服务器发送了哪些数据以及服务器又向客户端(浏览器)发送了哪些数据

  • 客户端给服务器发送的数据

    • currentPage 当前页码
    • pageSize 每页显示的记录数

  • 服务器给客户端发送的数据

    • totalCount 总记录数

      • 总记录数由后台数据库查询可得

      	select count(*) from tb_xxx;

    • totalPage 总页码

      • 总页码 = 总记录数(totalCount) / 每页显示的记录数(pageSize)

      这里要注意:如果 pageSize 能被 totalCount 除尽,那么就可以直接得到总页码,如果不能除尽,就需要在除的结果上加上 1。这里可以使用一个三目运算

      	int totalPage = totalCount % pageSize == 0 ? (totalCount / pageSize) : (totalCount / pageSize + 1);

    • list 每页的数据

      • 每页的数据由后台数据库(mysql)查询可得
      • start 由 currentPage 和 pageSize 计算可得

        	int start = (currentPage - 1) * pageSize;

      • pageSize 由客户端传入

      	select * from tb_xxx limit start, pageSize;

    • currentPage 当前页码

    • 建议将上述的属性封装到 PageBean 对象中,再传递给客户端


封装 PageBean

package cn.itcast.travel.domain;

import java.util.List;

/**

* @authon timber

* @description 分页对象

* @date 2020/6/24 下午3:03

*/

public class PageBean<T> {

private int totalCount; // 总记录数

private int totalPage; // 总页数

private int currentPage; // 当前页码

private int pageSize; // 每页显示的条数

private List<T> list; // 每页显示的数据集合

private int start = 0; // 查询的起始索引

/*

* @Author: timber

* @Description: 计算查询的起始索引

* @Date: 2020/6/24 下午5:52

* @param currentPage

* @param pageSize

* @Return

*/

public int handleStart(int currentPage, int pageSize){

return (currentPage - 1) + pageSize;

}

/*

* @Author: timber

* @Description: 计算查询总页码

* @Date: 2020/6/24 下午5:52

* @param totalCount

* @param pageSize

* @Return

*/

public int handlePage(int totalCount, int pageSize){

return totalCount % pageSize == 0 ? (totalCount / pageSize) : (totalCount / pageSize) + 1;

}

public int getTotalCount() {

return totalCount;

}

public void setTotalCount(int totalCount) {

this.totalCount = totalCount;

}

public int getTotalPage() {

return totalPage;

}

public void setTotalPage(int totalPage) {

this.totalPage = totalPage;

}

public int getCurrentPage() {

return currentPage;

}

public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public List<T> getList() {

return list;

}

public void setList(List<T> list) {

this.list = list;

}

}


分页页码前 5后 4效果

要实现分页页码前 5后 4的效果,需要对三种情况进行判断(begin 表示第一页,end 表示最后一页)

总页码不足 10

在总页码不足 10的情况下,直接将 begin 置为1,将 end 置为总页码数

总页码大于 10 前边不够5个

当前边不够 5个时,需要在后边补齐10个,将 begin 置为 1,end 置为 (begin + 9)

总页码大于10 后边不够4个

当后边不够四个时,需要在前边补齐10 个,将 end 置为总页码数,begin 只为 (end - 9)

代码示例

		/*

1. 一共展示10个页码,能够达到前5后4的效果

2. 如果前边不够5个,后边补齐10个

3. 如果后边不足4个,前边补齐10个

*/

// 定义开始位置 begin,结束位置 end

var begin;

var end;

// 1. 要显示10个页码

if(totalPage < 10){

// 总页数不超过 10

begin = 1;

end = totalPage;

}else{

// 总页数超过 10

begin = currentPage - 5;

end = currentPage + 4;

// 2. 如果前边不够 5个,后边补齐 10个

if(begin < 1){

begin = 1;

end = begin + 9;

}

// 3. 如果后边不够4个,前边补齐 10个

if(end > totalPage){

end = totalPage;

begin = end - 9;

}

}

以上是 普通分页查询逻辑 的全部内容, 来源链接: utcz.com/z/517786.html

回到顶部