-- MySQL 8.0+
SELECT * FROM t_order
ORDER BY create_time DESC
LIMIT ? OFFSET ?; -- ?1=pageSize, ?2=(pageNum-1)*pageSize
List<Order> selectPage(int offset, int limit) + int countTotal()。totalPages = (total + size - 1) / size,封裝 PageResult<T> {list, total, pageNum, pageSize, totalPages}。pageNum, pageSize 參數,校驗默認值,返回 JSON。async function load(page) {
const res = await fetch(`/api/orders?page=${page}&size=10`);
const {list, totalPages, pageNum} = await res.json();
renderTable(list);
renderPager(pageNum, totalPages);
}
function renderPager(cur, total) {
let html = '';
if (cur > 1) html += ``;
for (let i = 1; i <= total; i++) {
html += ``;
}
if (cur < total) html += ``;
document.getElementById('pager').innerHTML = html;
}
WHERE id > lastId ORDER BY id LIMIT size(游標分頁)。掌握「SQL LIMIT + Service 封裝 PageResult + 前端渲染分頁條」三步走,分頁功能快速落地且易維護。