1. 程式人生 > >mybatis分頁查詢需要注意的問題

mybatis分頁查詢需要注意的問題

一般對mybatis的分頁查詢的關鍵程式碼就兩行:

#currentPage代表當前頁,pageSize代表每頁的行數
PageHelper.startPage(currentPage, pageSize);

#查詢的語句
mapper.select();

一般程式碼在走到mapper.select()之後,會進入AbstractParser的實現類裡面,加入你用的資料庫是oracle資料庫則會進入OracleParse類裡面的

getPageSql(String sql)這個方法裡面,得到拼接會的分頁sql語句是:
select * from ( select tmp_page.*, rownum row_id from
( sql ) tmp_page where rownum <= ? ) where row_id > ?

其中這個sql變數就是你mapper.select()中對應的sql語句。

 

但是這個sql分頁有一個前提條件:每次mapper.select()查詢的結果都是一樣的。

你有可能會問mapper.select()這個查詢結果又不一樣的情況嗎?

答案是有的,例如你查詢一張表people,這張有一個欄位是state ,這個state欄位的值有1,2,3  ,你的sql

語句是     select * from people where state in (1,2),每次執行過這條語句之後,這條語句的某些列的值的狀態會變成0,那麼下次你再執行這條sql語句時,總數將會發生變化。

所以,用pagehelper進行分頁會出錯。