问题原因: PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。 只要我们保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。 线程中start的page 不能保证线程在当前执行退出时清理完page变量。 一次PageHelper的分页过程如下: 一、设置 page 参数 二、执行 query 方法 三、Interceptor 接口 中校验 ThreadLocal 中是否存在有设置的 page 参数 四、存在 page 参数,重新生成 count sql 和 page sql,并执行查询。不存在 page 参数,直接返回 查询结果 五、执行 LOCAL_PAGE.remove() 清除 page 参数
解决方案: 在使用PageHelper的方法最后调用PageHelper.clearPage();