Layui分页需后端显式接收page和limit参数,SpringBoot中用@RequestParam("page")和@RequestParam("limit")声明,不可依赖Pageable;返回JSON必须含data列表和long型count字段。

layui 分页的 page 和 limit 参数怎么传给 SpringBoot?
layui 的 laypage 或 table 组件默认用 page(当前页码)和 limit(每页条数)两个参数发起 GET 请求,SpringBoot 后端必须按这个约定接收,否则分页会始终查第 1 页。
常见错误是后端写成 pageNum/pageSize 或直接用 Pageable,但没做参数映射,导致请求发了、后端却读不到分页参数。
- Controller 方法里必须显式声明
@RequestParam(value = "page", defaultValue = "1") int page和@RequestParam(value = "limit", defaultValue = "10") int limit - 不要依赖 Spring Data JPA 的
Pageable自动解析 —— layui 不传pageable相关参数,它只传page和limit - 计算偏移量:起始行 =
(page - 1) * limit,这是 MyBatis 或 JDBC 手动分页的通用逻辑
SpringBoot 返回的数据格式怎么匹配 layui table 的 data 和 count?
layui table 要求接口返回 JSON 中必须有 data(当前页数据列表)和 count(总记录数),缺一不可。只返回 list 或套了一层 result 都会渲染失败。
典型错误是返回了封装过的响应体(如 {"code":0,"msg":"ok","data":[]}),但没把 count 放在最外层,导致 layTable 提示“数据接口返回格式有误”。
立即学习“Java免费学习笔记(深入)”;
- 推荐直接返回一个简单 VO:
public class LayuiPageResult { private long count; private List<?> data; // getter/setter } -
count必须是long类型(layui 内部用 JS 的 Number 判断,int 可能溢出) - 别用 Lombok 的
@Data自动生成 setter 却漏掉count字段 —— 有些 IDE 生成时会跳过基本类型字段
MyBatis 怎么实现手动分页而不依赖 PageHelper?
PageHelper 在多线程或异步场景下容易污染上下文,且和 layui 的参数名不天然对齐。更稳的方式是在 Mapper 层用原生 limit + offset。
注意 MySQL 和 PostgreSQL 的 limit 语法不同,SpringBoot 多数据源时容易翻车。
- MySQL 写法:
SELECT * FROM user LIMIT #{offset}, #{limit},其中offset = (page - 1) * limit - PostgreSQL 写法:
SELECT * FROM user LIMIT #{limit} OFFSET #{offset} - 总记录数必须单独查一次:
SELECT COUNT(*) FROM user WHERE ...,不能靠FOUND_ROWS()—— layui 需要精确总数 - 避免在同一个 SQL 里用
SELECT COUNT(*) OVER()窗口函数 —— 某些旧版 MySQL 不支持,且不利于索引优化
前端 table.reload() 时为什么老是重置到第 1 页?
调用 table.reload() 默认会清空当前页码状态,除非显式传参保留 where 和 page。
比如搜索后点“重载表格”,结果又回到第 1 页,是因为没把当前页码透传过去。
- reload 时加
page: {curr: 2}才能维持当前页,例如:table.reload('userTable', { where: {name: $('#searchName').val()}, page: {curr: currPage} // currPage 需提前存起来 }); - 更稳妥的做法是监听
table.on('page', ...)事件,在页码变化时缓存curr值 - 别在 reload 里写
page: {curr: 1}—— 这等于强制回首页,不是“重载当前页”
分页真正难的不是传参或返回格式,而是前后端对“当前页”状态的同步时机 —— 表格初始化、搜索触发、页码点击、外部按钮 reload,每种场景下 curr 的来源都得单独处理。


















