分页逻辑实现

分页简介

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

什么时候用?

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

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

分页的分类

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

  • 真分页(物理分页):
    在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);
}

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

真分页

暂时先不整理。

发布了14 篇原创文章 · 获赞 15 · 访问量 521

猜你喜欢

转载自blog.csdn.net/CodingNO1/article/details/104423663