mybatis多次查询全部后返回一个Page对象/sql语句多出一个limit

x33g5p2x  于2022-06-16 转载在 其他  
字(0.8k)|赞(0)|评价(0)|浏览(284)

今天在前端走页面的时候,发现有个接口返回的数据偶尔出现一次不是预想的结果。

先看我需要返回的数据:

再看不是预想中的数据:

断点调试后发现问题出现在List<Product> products = productBiz.selectListAll();这个方法上,
正常情况下返回的是全部,偶尔一次返回一个page对象。
products = Page{count=true, pageNum=1, pageSize=3, startRow=0, endRow=3, total=12, pages=4, reasonable=false, pageSizeZero=false}

一开始我以为是二级缓存的原因,于是手动写了一个sql查询语句,将flushCache设置为true。

<select id="selectProducts" resultMap="productMap" flushCache="true">
        select * from product;
    </select>

这时候多调这个接口的时候,会出现报错的情况,大概意思是在select * from product;LIMIT 3 附近有sql语法错误,但是我原本的sql语句是没有limit的,为什么会突然给我追加一个limit呢。所以这时候我把思绪转向了分页这里。
后面查了资料,发现原因:PageHelper插件是通过ThreadLocal实现分页的,page参数和线程是绑定在一起的,如果在前面其他的接口中page没消费,就会保留在这个线程上,会导致不该分页的方法消费了这个分页参数。

解决办法
List<Product> products = productBiz.selectListAll();方法前面加上PageHelper.clearPage();清楚分页参数缓存。

更多方法可参考mybatis执行自定义sql时,多出一个limit

相关文章