公司系统中使用PageHelper做分页插件,最近在做一个excel导出功能,excel导出是不需要分页的,但很奇怪每次mybatis都会自动帮忙分页,后来终于找到问题的原因了,这里记录下整个过程,以备那些还不是特别熟悉PageHelper的同学参考。
//正常的分页
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;//默认起始页
private int pageSize= 10;//默认10条
}
# PageHelper 分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=false
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
上面就是出现自动加分页的配置,当调用userList时应该不分页但每次都分页10条,我debug跟踪原来是分页插件配置中supportMethodsArguments配成了true,为true的情况下,PageHelper会分析传入的对象(QueryUserVo ),自动帮用户分析是否要进行分页。
PageObjectUtil.getPageFromObject
问题就在supportMethodsArguments这个参数,默认是false,因为我们也不太清楚该参数的含义,就给设置为了true。这里可通过两种方式解决这个问题,第一种删除supportMethodsArguments配置(不启用),这样分页的方法中必须调用PageHelper.startPage方法,第二种不要给pageNum和pageSize设置默认值或者变量名不要为这两个,这样PageHelper解析出来的值为空就不会进行分页。推荐第一种,因为第二种分页隐藏的比较深,不熟悉的人就很难找出问题点。
网友评论