1. 程式人生 > >mysql 使用 limit 實現底層分頁(附原始碼)

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條資料出來。

~~~~~