(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 語句