结论先行
主要原因:PageHelper使用了静态的ThreadLocal参数,让线程绑定了分页参数, 这个参数如果没被使用就会一直留在那儿,当这个线程再次被使用时,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。
照成原因:
PageHelper.setPage(1,10);
if(param!=null){
list=userMapper.selectIf(param)
}eles{
list=new ArrayList<User>();
}
//这样子如果param没有消费到,那么接下来如果进去了其他方法使用了select方法就会将这个page参数带进去,被消费;
改进:
if(param!=null){
PageHelper.setPage(1,10);
list=userMapper.selectIf(param)
}eles{
list=new ArrayList<User>();
}
避坑:让这个分页参数紧跟查询,可以查就建立;也就是保证被消费;或者在finally调用 PageHelper.clearPage();清除