首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Web 分頁核心邏輯:(page-1)*pageSize 起始位置計算原理解析

     編輯:程式設計疑難解答

代碼現場

典型分頁查詢片段:


int everyPage = 10;      // 每頁顯示條數(前端傳入)
int currentPage = 5;     // 目標頁碼(前端傳入)
int startIndex = (currentPage - 1) * everyPage; // 計算起始索引
// SQL: SELECT * FROM table LIMIT startIndex, everyPage

數學原理圖解

數據庫記錄從 0 開始索引:

頁碼記錄索引範圍起始索引公式結束索引
10 ~ 9(1-1)*10 = 09
210 ~ 19(2-1)*10 = 1019
320 ~ 29(3-1)*10 = 2029
n(n-1)*10 ~ n*10-1(n-1)*10n*10-1

核心公式推導

  • 起始索引 = (currentPage - 1) * pageSize
  • 偏移量 = 起始索引(MySQL LIMIT offset, count 中的 offset)
  • 總頁數 = (totalCount + pageSize - 1) / pageSize(向上取整)

實戰注意點

  1. 參數校驗:currentPage < 1 強制置 1;currentPage > totalPages 強制置 totalPages。
  2. 防注入:使用 PreparedStatement 綁定 LIMIT ?, ? 參數。
  3. 大偏移量性能:MySQL LIMIT 1000000, 10 極慢。優化方案:
    • 利用覆蓋索引:SELECT id FROM table ORDER BY id LIMIT offset, pageSize 回表查詳情。
    • 游標分頁:WHERE id > lastMaxId ORDER BY id LIMIT pageSize(需唯一遞增鍵)。
  4. 前端交互:傳遞 pageNum、pageSize,後端返回 PageInfo<T> (PageHelper) 或自定義 PageResult 包含 list, total, pages, current。

總結

分頁本質是 「跳過前 (page-1) 頁數據,取第 page 頁」。理解索引從 0 開始的零基思維,<(page-1)*pageSize> 就不再是死記公式,而是直觀的邏輯推演。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved