公司系統(tǒng)中使用PageHelper做分頁插件,最近在做一個(gè)excel導(dǎo)出功能,excel導(dǎo)出是不需要分頁的,但很奇怪每次mybatis都會(huì)自動(dòng)幫忙分頁,后來終于找到問題的原因了,這里記錄下整個(gè)過程,以備那些還不是特別熟悉PageHelper的同學(xué)參考。
//正常的分頁
public Page<User> userPageList(QueryUserVo userVo){
Page<User> result = PageHelper.startPage(userVo.getPageNum(),userVo.getPageSize());
userMapper.selectList(userVo);
return result;
}
//無需分頁
public Page<User> userList(QueryUserVo userVo){
return userMapper.selectList(userVo);
}
public class QueryUserVo {
private String name;
private int pageNum = 1;//默認(rèn)起始頁
private int pageSize= 10;//默認(rèn)10條
}
# PageHelper 分頁插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=false
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
上面就是出現(xiàn)自動(dòng)加分頁的配置,當(dāng)調(diào)用userList時(shí)應(yīng)該不分頁但每次都分頁10條,我debug跟蹤原來是分頁插件配置中supportMethodsArguments配成了true,為true的情況下,PageHelper會(huì)分析傳入的對(duì)象(QueryUserVo ),自動(dòng)幫用戶分析是否要進(jìn)行分頁。


PageObjectUtil.getPageFromObject
問題就在supportMethodsArguments這個(gè)參數(shù),默認(rèn)是false,因?yàn)槲覀円膊惶宄搮?shù)的含義,就給設(shè)置為了true。這里可通過兩種方式解決這個(gè)問題,第一種刪除supportMethodsArguments配置(不啟用),這樣分頁的方法中必須調(diào)用PageHelper.startPage方法,第二種不要給pageNum和pageSize設(shè)置默認(rèn)值或者變量名不要為這兩個(gè),這樣PageHelper解析出來的值為空就不會(huì)進(jìn)行分頁。推薦第一種,因?yàn)榈诙N分頁隱藏的比較深,不熟悉的人就很難找出問題點(diǎn)。