MyBatis MySQL limit分頁含運算動態語句
阿新 • • 發佈:2018-12-17
MySQL基本的分頁語句
select * from table limit offset,pageSize
正常情況下是沒問題的,如果offset是動態的
select * from table limit (pageNum-1)*pageSize,pageSize
這樣就無法執行了。 具體原因可以在MySQL中直接執行這種含運算子的語句試下就知道了。
現在給出兩種解決方案
- 使用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;
- 使用< bind />標籤
<bind name="key_offset" value="(pageNum-1)*pageSize"></bind>
select * from table limit #{key_offset},#{pageSize}
專案中我的SQL稍微複雜點兒,用的第二種方式,建議大家也用第二種。
實際上如果不想這樣做還是將offset的值計算好之後再傳入比較好(因為我要相容Oracle的介面,所以這樣搞了)。