分类
- “假分页”:其实就是采用前端技术对数据进行分页。当前端页面请求后台时将所有符合条件数据全部查询出来响应给前端,在前端通过一些技术对查询出来的数据进行分页。这种方式在数据量较小时效率还行,但是如果当数据量很大时就比较力不从心了,响应会比较慢。
- “真分页”:当前端请求后台查询数据时,后台根据前端传入的分页依据使用SQL的分页查询查询对应条数的数据。这种方式就大大的减少了数据量。
“真分页”实现
参数
- 首页:恒为1。
- 总页数:根据通过dao层操作数据库查询而得到的总数据量/每页显示数据量得到。
lastPage=totalData%pageSize==0?totalData/pageSize:totalData/pageSize+1
- 尾页:等于总页数
- 上一页:这里需要判断当前页是否<=1如果满足则上一页为1,否则上一页就等于当前页-1。
prePage=currentPage<=1?1:currentPage-1
- 下一页:判断当前页是否>=总页数,如果满足则下一页=总页数,否则下一页=当前页-1。
nextPage=currentPage>=lastPage?totalPage:currentPage+1
- 每页要显示的条数
- 当前页
流程
参考别人的流程。
- 前端访问页面发送请求。
- 匹配到对应的Controller处理器中进行处理。
- 在处理器中获取到当前页(如果是第一次访问则置当前页为1)。
- 通过Service访问对应的Dao层操作方法。
- 在dao方法中根据传入的当前页首先操作数据库查询出总数据数并封装到对象中。
- 在分页实体类的有参构造方法中进行的其他元素的值的计算。
- 分页对象数据封装完成之后就可以进行分页查询了。
- 使用SQL的分页查询语句查询出符合条件的数据(SELECT * FROM … LIMIT 起始,每页数据量);其中的起始位置是可以通过 (当前页-1)*每页的数据量算出的。
- 将查询出的数据list封装到分页对象中传递回Controller。
- 响应给前端,前端解析展示。
自己的流程
- 第一次访问
- 前端传入参数:每页要显示的条数、当前页(置“1”)。
- 根据每页要显示的条数返回响应的数据。
- 点击前一页
- 前端传入参数:当前页码、每页要显示的条数。
- 计算总页数。
- 先判断当前页面是不是第一页,如果是的话抛出异常。
- 如何选取数据库中的第N条记录?
- 点击后一页
- 同上
- 点击某个具体页码
- 前端传入参数:当前页码、每页要显示的条数、要跳转到的页面页码。