情景:页面上根据试卷 总分 这个搜索框去检索数据时,这个总分数据库中是没直接存值,而且它是在代码中经过相关处理计算之后得到返回的,这样的话,页面搜索条件是不能直接通过SQL查询来得到符合条件的数据的。只能获取所有数据,然后计算各项总分值,然后从这个所有数据的集合中来进行筛选,返回到页面。
遇到的问题:自己在写的时候,使用的setPageParam();的方式,由于框架原因,自己写的SQL其实没分页条数限制,但SQL执行时它一直自己就带了分页限制limit 10,所以一直只返回前十条,就算数据库中其实是有符合的数据,但因为它未在前十条,所以一直筛不到。
对于这个问题,后面是直接换成手动分页解决的。
@PostMapping("/list")
public Map list(@RequestBody HashMap<String,Object> map)
{
Map result = scoreService.selectScoreList(map);
return result;
}
@Override
public Map<String, Object> selectScoreList(Map map) {
String score = (String) map.get("score");//检索传参分数值
Map queryMap = new HashMap();
//省略参数......
List<Score> list = scoreMapper.selectScoreList(queryMap);
//此处省略分数处理细节.........................
int total = 0;
//如果需进行分数检索匹配,才筛选符合的数据并分页返回
if(StringUtils.isNotEmpty(score)){
list = list.stream().filter(s -> score.equals(s.getScore())).collect(Collectors.toList());
}
Integer pageNum = (Integer) map.get("pageNum");
Integer pageSize = (Integer) map.get("pageSize");
if(null == pageNum || null == pageSize){
throw new CustomException("请传入分页参数(pageNum、pageSize)!");
}
//分页
total = list.size();
if(total >= pageSize*pageNum){
list = list.subList((pageNum-1)*pageSize,pageSize*pageNum);
}else {
list = list.subList((pageNum-1)*pageSize,total);
}
Map resultMap = new HashMap();
resultMap.put("code", HttpStatus.SUCCESS);
resultMap.put("data",list);
resultMap.put("total",total);
return resultMap;
}