前端页面
打开登入日志页面源码文件,如下图所示,其中<pagination> 组件为分页组件
其函数调用链getList -> list -> request[axios]
进入开发者模式,查看网络请求。
找到对应网后端源码
后端代码
startPage()
分页原理
selectLogininforList中并未使用Pagesize 和PageNum , 它应该返回所有数据,而不是分页数据。那他是如何做到筛选数据?
SysLogininforMapper.xml文件
我们可以查看日志输出。
19:31:19.251 [http-nio-8080-exec-23] DEBUG c.r.s.m.S.selectMenuTreeAll - [debug,137] - ==> Preparing: select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 order by m.parent_id, m.order_num
19:31:19.253 [http-nio-8080-exec-23] DEBUG c.r.s.m.S.selectMenuTreeAll - [debug,137] - ==> Parameters:
19:31:19.258 [http-nio-8080-exec-23] DEBUG c.r.s.m.S.selectMenuTreeAll - [debug,137] - <== Total: 33
19:31:20.512 [http-nio-8080-exec-25] DEBUG c.r.s.m.S.selectLogininforList_COUNT - [debug,137] - ==> Preparing: SELECT count(0) FROM sys_logininfor
19:31:20.513 [http-nio-8080-exec-25] DEBUG c.r.s.m.S.selectLogininforList_COUNT - [debug,137] - ==> Parameters:
19:31:20.514 [http-nio-8080-exec-25] DEBUG c.r.s.m.S.selectLogininforList_COUNT - [debug,137] - <== Total: 1
19:31:20.514 [http-nio-8080-exec-25] DEBUG c.r.s.m.S.selectLogininforList - [debug,137] - ==> Preparing: select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor order by info_id desc LIMIT ?
19:31:20.515 [http-nio-8080-exec-25] DEBUG c.r.s.m.S.selectLogininforList - [debug,137] - ==> Parameters: 10(Integer)
19:31:20.516 [http-nio-8080-exec-25] DEBUG c.r.s.m.S.selectLogininforList - [debug,137] - <== Total: 10
发现它执行了我们未编写的SQL语句
这里可以得到total
这里可以得到分页数据
其实 SQL 被MyBatis 拦截改变了 ,由于涉及MyBatis 源码,笔者能力不足,遍不在向下深究。
第二页数据(前端参数为pageNum=2&pageSize=10 请求对应的后端Log)
Paramters :代表从第10条数据开始
Interger : 取10个条数据