mybatis分頁查詢需要注意的問題
阿新 • • 發佈:2018-11-16
一般對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進行分頁會出錯。