查询分页不只有 limit,这四种分页方法值得掌握

简介: 查询分页不只有 limit,这四种分页方法值得掌握

🍁 作者:知识浅谈,阿里云社区星级博主,CSDN签约讲师,后端领域优质创作者,热爱分享创作

💒 公众号:知识浅谈

📌 擅长领域:全栈工程师、爬虫、ACM算法

🔥 联系方式vx:zsqtcc

分页的出现⛳⛳⛳

  1. 由于前端在页面显示数据时,希望每个页面只显示指定条数的数据,由于数据量较大,不能够一次性展示,所以就通过限制每个页面固定的条数进行展示。
  2. 如果数据量较大的话,页面也不一定加载完全,所以造成效率比较差,所以解决方案分页查询就可以很好的解决这个问题了,通过把庞大的数据按照固定的数目显示,在通过上一页或下一页的按钮显示其它的数据。

🤞Mybatis常用四种分页方法总结🤞

🎈limit的传统方式

📐最常用的mysql分页是使用limit,limit 子句可以被用于强制 select 语句返回指定范围和大小的记录数。limit 接受一个或两个数字参数。参数必须是一个整数常量。

  • 如果是一个参数,如limit 10,则表示默认从开始位置开始获取10条数据。
  • 如果是两个参数,第一个参数指定的是返回行数的开始位置,第二个参数指定的是返回记录行的数目。
    Eg: select * from user limit 0,10
    表示从第0个位置开始获取10条数据。

🎈PageHelper插件的方式

这个的使用方法是在查询数据之前设置一个pageHelper,当进行查询的时候会对查询语句进行拦截,然后在对应的查询语句上添加limit a,b这个分页的语句。

👀使用方法如下:

  1. 引入依赖
<!-- pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.version}</version></dependency>
  1. 使用代码
    注意 PageHelper.startPage(pageNo, pageSize)
PageResult<List<Employee>>result=newPageResult<>();
//就是下边的这个地方,使用了  pageNo是offset就是开始位置的偏移量,第二个参数pageSize是查询返回的数据的条数PageHelper.startPage(pageNo, pageSize);
try {
List<Employee>employeeList=employeeService.findAll();
PageInfo<Employee>pageInfo=newPageInfo<>(employeeList);
log.info(String.valueOf(employeeList));
result.setTotal(pageInfo.getTotal());
result.setPages(pageInfo.getPages());
result.setCurrent(pageInfo.getPageNum());
result.setSize(pageInfo.getPageSize());
result.setResult(employeeList);
result.success("查询成功!");
        }
  1. 查询结果

🎈自定义Interceptor的方式

类似于PageHelper,只不过这个是需要自己写Interceptor拦截器的,对于相应的查询进行。

有人可能会说:有了PageHelper,为什么还要自定义Inteceptor?

使用分页插件的时候再dao层使用了@Param注解导致了分页失效

像是上边的这种情况,我们只能自定拦截器拦截对应的查询语句得到正确的结果。

🎈RowsBounds方式

📐相比上边的三中方法是物理分页,这个RowsBounds是逻辑分页,之所以这么说是因为这个是把所有数据查出来之后,然后再取出对应位置的记录。

📐RowBounds中有2个参数offset和limit。使用这种方式获取所有的ResultSet,从ResultSet中的offset位置开始获取limit个记录。但这并不意味着JDBC驱动器会将所有的ResultSet存放在内存,实际上只加载小部分数据到内存,如果需要,再加载部分数据到内存

代码:

service层:RowBoundsrowbounds=newRowBounds(offset, Integer.parseInt(pageSize));
//用户数据集合List<Map<String, Object>>userList=userDao.queryUserList(rowbounds);
Dao层:publicList<Map<String, Object>>queryUserList(RowBoundsrowbounds); 
mapperxml层:<!--查询用户列表--><selectid="queryUserList"resultType="java.util.Map">select*fromuser</select>

🍚总结

总的四种方法,前三种属于物理分页,最后一种属于逻辑分页。

相关文章
|
19天前
分页实现
分页实现
11 0
|
3月前
|
SQL Oracle 关系型数据库
3.分页
3.分页
|
5月前
排序和分页
排序和分页
30 0
|
5月前
|
SQL Oracle 关系型数据库
第5章_排序与分页
第5章_排序与分页
27 0
|
10月前
|
SQL Oracle 关系型数据库
第05章_排序与分页
第05章_排序与分页
56 0
|
JSON API 数据库
分页
1. program中注册`builder.Services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();` 2. 控制器中增加依赖
|
SQL Java 数据库连接
分页的实现
分页的实现
|
数据库
分页limit和排序order by
分页limit和排序order by
|
SQL
九、查询结果排序与分页
九、查询结果排序与分页
87 0