mysql 使用 limit 實現底層分頁(附源碼)

原理解析:

<select id="queryProductList" resultType="com.pojo.Product">
	SELECT *
	FROM
	tb_product
	ORDER BY
	priority DESC
	LIMIT #{rowIndex},#{pageSize};
</select>

上面是一段 mybatis 裏面的一段分頁的代碼,區別不大,我們直接按這段代碼來看。從代碼可以看出,數據庫的底層分頁很簡單,只需要一個屬性:LIMIT(大小寫都可以),然後再傳入兩個參數就行。第一個參數:rowIndex,表示的是從數據庫的第幾行開始獲取數據;第二個參數:pageSize,表示的是從數據庫獲取的一頁的條數是多少。

總而言之,我們只需要告訴數據庫,我們要從第幾行開始拿多少條數據就行了。

但是,前端頁面往往傳給我們的是當前的頁碼(pageIndex)和每頁的條數(pageSize),很明顯這裏的 pageIndex 不是 rowIndex ,所以我們需要將頁碼轉換成表示數據庫中第幾行的行碼 rowIndex。

public static int calculateRowIndex(int pageIndex, int pageSize){
	return (pageIndex > 0) ? (pageIndex - 1) * pageSize : 0;
}

我們可以把這個轉換的過程封裝一個靜態方法,方便調用。方法的作用就是將頁碼轉換成行碼。

例子:

我們現在需要獲取第三頁(pageIndex=3)的10條數據(pageSize=10),調用方法將 pageIndex 進行轉換,

pageIndex > 0 

所以 rowIndex =  ( pageIndex - 1 ) * pageSize 

就是 rowIndex == (3-1)*10 == 20

表示要從數據庫的第20行開始拿10條數據出來。

~~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章