发表于: 2020-08-17 23:21:50

2 1384


今天完成的事情:

分页接口 

明天计划的事情:

把数据渲染到前端页面。

了解压测相关概念,开始任务六。
遇到的问题:

收获:

分页就是通过sql语句的limit关键字来限制条件。

 select * from student order by salary desc limit #{start},#{pageSize}

1.做分页首先要知道需要什么数据。

总页数    totalPage

总记录数  totalCount

每页显示的记录数 pageSize

当前页 currPage

sql语句的最开始索引 startIndex

每页显示的具体数据  List<T> data

2.怎么拿到这些数据。

总记录数: select count(*) from student 

总页数:要计算出来,计算公式是:总记录数%每页显示的记录数,如果结果是0,就返回总记录数%每页显示的记录数的结果,如果不是,结果+1。

每页显示的记录数:这个参数可以让前端传过来。

当前页:也是前端传来的

sql语句的开始索引:先查找一下规律:

首先,pageSize = 2,即每页显示条数为2条

第1页

SELECT * FROM `student` LIMIT 0,2;

第2页

SELECT * FROM `student` LIMIT 2,2;

第3页

SELECT * FROM `student` LIMIT 4,2;

    

列个表看看

当前页

Start索引

当前页记录数pageSize

1

0

2

2

2

2

3

4

2

可以看出0=(1-1)*2

              2=(2-1)*2

              4=(3-1)*2

所以可以得出规律start索引=(当前页-1)*当前页记录数,start=(currPage-1)*pageSize

每页显示的具体数据通过limit语句查询得到

select * from student order by salary desc limit #{start},#{pageSize}

3.需要的数据搞清楚,接下来建立pageBean

/**
* 当前页
*/
private int currPage;
/**
* 每页显示的记录数
*/
private int pageSize;
/**
* 总页数
*/
private int totalPage;
/**
* 总条数
*/
private int totalCount;
/**
* sql语句最开始索引值
*/
private int skips;
/**
* 当前页显示的具体数据
*/
private List<Student> studentList;

还需要对这些数据做个计算,还有一些限制。

public Page(int curr,int size,int total){
this.pageSize=size;
   //计算总页数
   this.totalPage=total%size==0?total/size:(total/size)+1;
   //不给当前页码变成0
   this.currPage=curr<1 ? 1:curr;
   //不让当前页码超过总页数
   this.currPage=curr>this.totalPage ?this.totalPage:this.currPage;
   //计算出最初索引值
   skips=(this.currPage-1)*this.pageSize;
   this.totalCount=total;
}

controller

/**
* 分页接口
* @param curr
* @param pageSize
* @return
*/
@RequestMapping("/page")
@ResponseBody
public Map<String,Object> page(@RequestParam(required =true,defaultValue = "1") int curr, @RequestParam(required = false,defaultValue = "5") int pageSize){
Map<String,Object> map=new HashMap<>();
   //获取总记录数
   int count=studentServiece.getCount();
   //把当前页curr,要显示的记录数,总记录数传进page里面做计算。
   Page page=new Page(curr,pageSize,count);
   //通过page对象的start开始索引字段,和pageSize查询出对应的具体数据
   List<Student> list=studentServiece.queryByPage(page);
   
   page.setStudentList(list);
   map.put("data",page);
   return map;
}

postman测试


返回列表 返回列表
评论

    分享到