gpt4 book ai didi

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

转载 作者:知者 更新时间:2024-03-12 23:16:19 33 4
gpt4 key购买 nike

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

先看我需要返回的数据:

再看不是预想中的数据:

断点调试后发现问题出现在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

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com