分页逻辑实现

断了今生、忘了曾经 提交于 2020-02-28 10:33:43

分页简介

用来将数据分割成多个部分来分页面展示。

什么时候用?

数据量达到一定的时候,就需要使用分页来进行数据分割。要不然可能会面临以下问题:

  • 客户端一次性显示太多数据会影响到用户的体验,比如很难找到客户想要的信息,以及加载页面数据过慢。
  • 对于服务端来说,一次性传送的数据过多,可能造成内存溢出。

分页的分类

分页分为真分页和假分页:

  • 真分页(物理分页):
    在mysql中使用select * from table where …limit start , size(在oracle中复杂些)
    第一个参数start代表开始数据的索引位置
    第二个参数是要查询多少条数据
  • 假分页(逻辑分页):
    直接使用select * from table where …
    这样将所有数据查询出来存放到内存中,每次需要查询时直接从内存中去取出相应索引区间的数据

区别

真分页相比于假分页不会造成内存溢出,但翻页的数据相比于假分页又慢,所以根据实际情况选择分页方式,如果数据量不大,可以考虑使用假分页使翻页速度加快。

实现

假分页

假分页实际上使用List去存储所有查询出的值,再用subList方法获取两个索引之间的数据。

先在dao层,创建StudentMapper接口

List<Student> queryStudentsByArray();

再创建StudentMapper.xml文件,编写查询语句:

<select id="queryStudentsByArray" resultType="Student">
   select * from student
</select>

然后定义Service接口并定义分页方法:

List<Student> queryStudentsByArray(int currPage, int pageSize);

再在Servlce实现类中重写该方法:

@Override
public List<Student> queryStudentsByArray(int currPage, int pageSize) {
     List<Student> students = studentMapper.queryStudentsByArray();
     // 从第几条数据开始
     int firstIndex = (currPage - 1) * pageSize;
     // 到第几条数据结束
     int lastIndex = currPage * pageSize;
     return students.subList(firstIndex, lastIndex);
}

这里控制器和前台就根据这个方法来编写。

真分页

暂时先不整理。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!