话不多说直接上问题
controller:
@GetMapping("/list")
public TableDataInfo list(PmsAttrGroup pmsAttrGroup) {
startPage();
List<PmsAttrGroup> list = pmsAttrGroupAppService.selectPmsAttrGroupList(pmsAttrGroup);
return getDataTable(list);
}
service:
@Override
public List<PmsAttrGroup> selectPmsAttrGroupList(PmsAttrGroup pmsAttrGroup) {
return pmsAttrGroupMapper.selectList(null).stream().map(i -> {
PmsCategory pmsCategory = pmsCategoryMapper.selectById(i.getCategoryId());
i.setCategoryName(pmsCategory.getName());
return i;
}).collect(Collectors.toList());
}
}
上面的startPage是RuoYi帮我们封装好的一个方法,这里的问题就是说因为service里面的逻辑我无法分页了,接口返回值total属性永远是10,明显不符合分页效果
解决方法:不使用stream实现
@Override
public List<PmsAttrGroup> selectPmsAttrGroupList(PmsAttrGroup pmsAttrGroup) {
List<PmsAttrGroup> groups = pmsAttrGroupMapper.selectList(null);
for (PmsAttrGroup group : groups) {
PmsCategory pmsCategory = pmsCategoryMapper.selectById(group.getCategoryId());
group.setCategoryName(pmsCategory.getName());
}
return groups;
}
总结: 我这里很好奇为什么不能用stream,问了一圈无果,目前的解释是pageHelper使用的是ThreadLocal,而stream是多线程运行,导致缓存拿不到?如果有大佬也遇到过这个问题,欢迎留言讨论