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進行分頁會出錯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM