Springboot | 分页原理以ruoyi为例
分页图
在处理大量数据时候一般都需要使用到分页。以ruoyi为例,系统管理->日志管理->操作日志
核心逻辑一览
前端发送url参数list?pageNum=2&pageSize=10
->后端接受参数并封装成Page类,最后用相关SQL语句(limit)查询数据库,并返回前端->前端接受数据并显示
前端分析
在views->monitor->operlog->index.vue找到 操作日志 的源码后,找到分页组件<pagination>
并作如下分析:
- total总数据条数
- page当前页码
- limit每页条数
- getList是查询的点击事件
在getList
方法中使用了封装好了lsit
方法向后端发送分页数据请求
list
方法向后端/monitor/operlog/list
发送get请求。
通过开发者工具更直观的观察发送的参数
发送了url参数
,参数分别是pageNum
、pageSize
,也就是第几页,每页的数据个数
后端分析
根据前端请求的接口/monitor/operlog/list
,找到后端的源码
startPage
设置请求分页的数据selectOperLogList
查询数据库getDataTable
封装数据
startPage
方法的逻辑:
- 创建PageDomain类对象
- 并对其进行参数设置
PageDomain
类是分页数据的自定义类,重要的参数:pageNum、pageSize、isAsc
接着,找到重要的SQL相关的XML文件
为什么SQL语句中没有写limit,找了下上下代码都没找到一个limit。我无法理解。。。。
它所对应的后端日志如下:
这里附上SQL中limit的用法:
SELECT * FROM table_name LIMIT [offset,] rows;
参数分别是偏移量、数据个数
e.g.LIMIT 5,10 截取从第6个开始,共10条数据。输出第6-16的数据