1. 程式人生 > >MyBatis MySQL limit分頁含運算動態語句

MyBatis MySQL limit分頁含運算動態語句

MySQL基本的分頁語句

select * from table limit offset,pageSize

正常情況下是沒問題的,如果offset是動態的

select * from table limit (pageNum-1)*pageSize,pageSize

這樣就無法執行了。 具體原因可以在MySQL中直接執行這種含運算子的語句試下就知道了。

現在給出兩種解決方案

  1. 使用MySQL提供的方案(感覺上好像也不是MySQL給的,大家自己看吧) 原始SQL
 select * from mysql01 limit (1-1)*5,5

方案:

SET @a=CONCAT('select * from mysql01 limit ',(1-1)*5,',',5,'');
 PREPARE texts FROM @a;
 EXECUTE texts;
  1. 使用< bind />標籤
<bind name="key_offset" value="(pageNum-1)*pageSize"></bind>

select * from table limit #{key_offset},#{pageSize}

專案中我的SQL稍微複雜點兒,用的第二種方式,建議大家也用第二種。

實際上如果不想這樣做還是將offset的值計算好之後再傳入比較好(因為我要相容Oracle的介面,所以這樣搞了)。