PageHelper分頁插件使用過程中的問題

項目中使用了Mybatis加PageHelper插件實現分頁查詢功能。空閒時間研究了一下這個插件的使用。

只有緊跟在 PageHelper.startPage 方法後的第一個 Mybatis 的查詢(Select)方法會被分頁。

也就是當分頁查詢是,設置完pageSize和pageNum後的第一個sql查詢語句纔會實現分頁查詢功能,再後面的不會被實現。

不支持一對一和一對多結果映射的分頁查詢

在一對一和一對多時,根據分頁條件查詢出 100 條數據時,由於一對一和一對多會去重,經過嵌套處理後數據量會減少,因此分頁想要獲得 100 條數據無法實現。想要支持這種情況可以使用嵌套查詢。嵌套查詢是要額外執行SQL,主SQL可以得到正確的結果數量,因此可以正常分頁。

 

當表記錄達到數十萬上百萬時 ,越往後的頁面(也就是偏移量越大時)分頁查詢越慢。

這個問題的直接原因是全表掃描到偏移量的位置這個過程耗時,這時候就需要自己單獨做處理了,例如 使用查詢ID一個字段的子查詢sql來定位到偏移量的位置 實現優化分頁性能(如果要集成到插件中需要重寫MySqlDialect這個類對插件源碼進行修改

select * from orders where status='1' and  ID>(select ID from orders where status='1' limit 100000,1)limit 0,100

 分頁功能中執行count查詢時很耗時

這個問題我們可以自定義查詢sql來進行優化(插件支持自定義count語句) ,例如我們的要分頁的sql是

<select id="getCoustomerList" parameterType="com.activity.center.dto.manage.ActivityClientStatisResDTO" resultType="com.activity.center.dto.manage.ActivityClientStatisResDTO">
        SELECT * from activity_info where user_type = 0
        <if test="clientName != null and clientName !=''">
            AND NAME like '%${clientName}%'
        </if>
    </select>

按照PageHelper自定義count查詢的規則,我們新建一個select標籤,id的名稱定義成  getCoustomerList_count 這個名字,就可以在查詢時使用自己定義的這個count查詢了。count查詢id的定義格式就是 查詢sql標籤的id+'_count' 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章