需求:客戶端通過傳遞pageNum(頁碼)和pageSize(每頁顯示的條數)兩個參數去分頁查詢數據庫表中的數據。
我們知道MySQL提供了分頁函數limit m,n,但是該函數的用法和需求不一樣,所以就需要根據實際情況去改寫以滿足需求。分析如下:
查詢第1條到第10條數據的sql是:select * from table limit 0,10; ->對應我們的需求就是查詢第一頁的數據:select * from table limit (1-1)*10,10;
查詢第10條到第20條數據的sql是:select * from table limit 10,20; ->對應我們的需求就是查詢第二頁的數據:select * from table limit (2-1)*10,10;
查詢第20條到第30條數據的sql是:select * from table limit 20,30; ->對應我們的需求就是查詢第三頁的數據:select * from table limit (3-1)*10,10;
通過上面的分析,可以歸納得出符合需求的分頁SQL偽代碼是:select * from table limit (pageNum-1)*pageSize,pageSize。總而言之,我們只需要告訴數據庫要從第幾行開始拿多少條數據就行了。
但是,limit語句不支持計算,因此,需要從外部傳參(pageNum-1)*pageSize的計算結果,即在Java中計算出來。令rowIndex = (pageNum-1)*pageSize,rowIndex常用的計算方法如下:
//計算行號
public static int getRowIndex(int pageNum, int pageSize){ return (pageNum> 0) ? (pageNum- 1) * pageSize : 0; }
Reference: