目錄
1.1、錯誤描述
1.2、解決方案
1.1、錯誤描述
周一在工作中,寫了一個列表分頁的接口,其中使用的是PageHelper分頁依賴,原本想著挺簡單的,也就是使用PageHelper.startPage(pageNum, pageSize);方法就可以了,代碼寫完了之后,前端聯調發現一個問題:每次獲取到的記錄總數total總是查詢出來的記錄數量,而不是數據庫中的總記錄數量。舉個例子:
前端傳遞pageNum=2,pageSize=10,本次查出結果是7條記錄,那么接口返回的total也是7條,但是實際上,數據庫中的總記錄是17條。
發現這個問題之后,我就跟著我的代碼排查了一下,最開始的代碼大概如下所示:
看了代碼發現這樣寫好像也沒啥問題,沒看出什么結果,就百度了一圈,發現還是沒解決問題,百度給出的答案大部分都是下面這種:
- 是否正確使用分頁插件。
- 是否自定義了RowBound對象。
- 未正確關閉 PageHelper 的分頁上下文。
上面的幾種情況都不是我遇見的,我又仔細想了下,突然看到我代碼里面通過mapper查詢出來的List結果集,和我返回給前端的List結果集是兩個不同的,按照PageHelper分頁的原理,它緩存的是第一次SQL查詢的結果集,而如果后面對第一次查出的結果集有二次處理,那么PageHelper就無法獲取到實際的total數量。
既然問題找到了,那就是要如何解決啦???下面看下如何解決這個問題。
1.2、解決方案
最終的解決方案,就是通過獲取到PageInfo對象,然后手動的將total總記錄數量設置到要返回的數據里面。
到此,使用PageHelper分頁插件,發現獲取到的total總記錄數量不對,無法獲取到正確的total數量的問題就解決啦。