springboot+mybatis
项目使用的是pagehelper分页插件,程序频繁执行一个查询sql,数据量大约30来条,这个sql没有使用分页,但是在执行这个查询接口前访问了其他有分页的查询接口后,再次访问这个没有使用分页的接口就会发现只能查一部分数据,但是刷新页面重新访问这个接口又能全部查询.
我程序里面根本没有分页,参数里面也没有传入分页参数,查询返回的对象应该是一个ArrayList对象,结果那一次异常情况返回的是Page对象,是ArrayList的子类,说明pagehelper对查询进行了分页,于是我加上了mybatis的sql打印,发现异常的那次多执行了一次sql,大概是select count(0) from table where 1=1这样。

那次异常的查询中,我发现PageHelper的ThreadLocal里面居然有Page对象,但是我程序没有进行分页,ThreadLocal里面应该是空的才对,不清楚是不是PageHelper的内部bug导致的;

于是我只能在调用查询之前手动调用一次:

PageHelper.clearPage();

于是就没有出现这个异常情况,至于为什么会产生还没找到原因

 public JSONObject userPage() {
        PageHelper.clearPage();
        List<Object> packages = mapper.getAll();
        return success(packages);
    }

再查询前执行 PageHelper.clearPage();就不会出现预料之外的分页了

上一篇 下一篇