PageHelper 分頁和排序之間的關系


(1)PageHelper是根據pageSize或者orderByOnly來判斷是否要分頁的,pageSize大於0 或者orderByOnly 為true才進行分頁操作

    @Override
    public boolean beforePage(MappedStatement ms, Object parameterObject, RowBounds rowBounds) {
        Page page = getLocalPage();
        if (page.isOrderByOnly() || page.getPageSize() > 0) {
            return true;
        }
        return false;
    }

(2)如果不進行分頁則PageHelper的order by操作也是不進行的;如下是PageInterceptor類的部分代碼:

                if (dialect.beforePage(ms, parameter, rowBounds)) {
                    //生成分頁的緩存 key
                    CacheKey pageKey = cacheKey;
                    //處理參數對象
                    parameter = dialect.processParameterObject(ms, parameter, boundSql, pageKey);
                    //調用方言獲取分頁 sql
                    String pageSql = dialect.getPageSql(ms, boundSql, parameter, rowBounds, pageKey);
                    BoundSql pageBoundSql = new BoundSql(configuration, pageSql, boundSql.getParameterMappings(), parameter);
                    //設置動態參數
                    for (String key : additionalParameters.keySet()) {
                        pageBoundSql.setAdditionalParameter(key, additionalParameters.get(key));
                    }
                    //執行分頁查詢
                    resultList = executor.query(ms, parameter, RowBounds.DEFAULT, resultHandler, pageKey, pageBoundSql);
                } else {
                    //不執行分頁的情況下,也不執行內存分頁
                    resultList = executor.query(ms, parameter, RowBounds.DEFAULT, resultHandler, cacheKey, boundSql);
                }

當不分頁時,是直接拿攔截獲得的SQL進行查詢的,所以沒有組裝 order by 語句


免責聲明!

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



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