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;
簡單的SQL在mybatis中直接按照上邊替換就好。這裏參考的解決在MYSQL中 limit語句無法識別運算的問題。
- 使用< bind />標籤
<bind name="key_offset" value="(pageNum-1)*pageSize"></bind>
select * from table limit #{key_offset},#{pageSize}
項目中我的SQL稍微複雜點兒,用的第二種方式,建議大家也用第二種。
實際上如果不想這樣做還是將offset的值計算好之後再傳入比較好(因爲我要兼容Oracle的接口,所以這樣搞了)。