在SQL语言中主要是采用LIMIT语句进行分页查询,下面将以一个分页查询的案例来完成知识的回顾
1、一个参数:
SELECT * FROM data LIMIT 1;
假设满足条件的共有10条数据,上述语句会返回第一条满足条件的数据。
2、两个参数:
- SELECT * FROM data LIMIT 2;
- SELECT * FROM data LIMIT 0,2;
上述两条语句是等价的,都会返回满足条件的前两条。
SELECT * FROM data LIMIT 1,2;
以上面这条语句为例,表示忽略第一个满足条件的数据开始再查询两条,例如1,2,3满足条件,上面这条语句执行后将返回2,3这两条数据,于是就为实现了分页查询奠定了基础。
前台只需要向后台传入两个参数,一个是要查询的页码,另一个是每页数据的总数。
page表示页码,length表示每页数据总长度。
1、在后台处理page参数:
int start = (page-1)*length; //表示前面已经查询出来的数据条数
2、处理好忽略数据长度之后即可开始分页查询了:
SELECT * FROM data LIMIT start,length;
由于前台实现分页查询需要总页数,每页的数据等信息,所以我将分页查询封装成了一个对象,这样只需要将该对象返回给前台即可得到所有前台分页所需的数据了
1、封装页面对象类:
- package com.example.emoswebbackground.Util;
-
- import lombok.Data;
-
- import java.io.Serializable;
- import java.util.List;
-
- @Data
- public class PageUtils implements Serializable {
- private static final long serialVersionUID = 1L;
- /*** 总记录数*/
- private long totalCount;
- /*** 每页记录数*/
- private int pageSize;
- /*** 总页数*/
- private int totalPage;
- /*** 当前页码*/
- private int pageIndex;
- /*** 列表数据*/
- private List list;
-
- public PageUtils(List list, long totalCount, int pageIndex, int pageSize) {
- this.list = list;
- this.totalCount = totalCount;
- this.pageSize = pageSize;
- this.pageIndex = pageIndex;
- this.totalPage = (int) Math.ceil((double) totalCount / pageSize);
- }
-
- }
2、Controller类:
- @PostMapping("/SearchLeaveByPage")
- @Operation(summary = "分页查询请假记录")
- //SearchLeaveByPageForm 对象共两个属性,页码和每页长度
- public R searchLeaveByPage(@Valid @RequestBody SearchLeaveByPageForm form){
- int page = form.getPage();
- int length = form.getLength();
- //计算已查过的数据
- int start = (page-1)*length;
- //将数据转化为Map
- HashMap param = JSONUtil.parse(form).toBean(HashMap.class);
- param.put("start",start);
- //执行分页查询的service层
- PageUtils pageUtils = leaveService.searchByPage(param);
- return new R().put("page",pageUtils);
- }