Closed shaoguanlee closed 1 year ago
测试了,没有复现。。。你在如图位置加断点,看看执行的方法和结果对不对。
您好,很感谢您的回复。 我按照你给的提示再次debug看了下,发现其实是PageHelper的问题,在此表示抱歉。 截图如下:
com.github.pagehelper.dialect.AbstractHelperDialect
@Override
public Object afterPage(List pageList, Object parameterObject, RowBounds rowBounds) {
Page page = getLocalPage();
if (page == null) {
return pageList;
}
page.addAll(pageList);
if (!page.isCount()) {
page.setTotal(-1);
} else if ((page.getPageSizeZero() != null && page.getPageSizeZero()) && page.getPageSize() == 0) {
page.setTotal(pageList.size());
} else if (page.isOrderByOnly()) {
page.setTotal(pageList.size());
}
return page;
}
在afterPage方法中没有看到清理threadLocal的代码,于是我继续跟踪代码,直到return selectList我都没有看到清理threadLocal
这里我用的是com.github.pagehelper.dialect.helper.MySqlDialect。
这里说的前一个查询是
PageHelper.startPage(pageNum, pageSize, false)
.doSelectPage(() -> {
return gatewayService.findListByWrapper(q -> {
q.select(DingtalkDeviceGateway::getSn);//只要SN
});
}).getResult();
/**
* 根据动态参数进行查询
*/
public List<T> findListByWrapper(Consumer<ExampleWrapper<T, Long>> q) {
ExampleWrapper<T, Long> example = baseMapper.wrapper();
q.accept(example);
return example.list();
}
问题描述
使用AbstractService#findById报错,第一次查询正常根据ID返回了预期的数据。之后每一次调用都报以下错误
而且诡异的是,每调用一次,报错里的
but found: 2
的数字会递增!也就是说第一次不报错,第二次报2个重复,第三次报3个,第四次是4个。。。。观察sql日志如下,可以看到实际的查询SQL是没有问题的
版本
代码
AbstractService#findById
我的代码如下
实体类
实体基类
发生错误的业务类
具体的报错信息
怎么感觉我在使用的过程中总是出现各种莫名其妙的问题,是我的使用姿势不对吗?-_-!