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;

簡單的SQL在mybatis中直接按照上邊替換就好。這裏參考的解決在MYSQL中 limit語句無法識別運算的問題

  1. 使用< bind />標籤
<bind name="key_offset" value="(pageNum-1)*pageSize"></bind>

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

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

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

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