Java手动分页

情景:页面上根据试卷 总分 这个搜索框去检索数据时,这个总分数据库中是没直接存值,而且它是在代码中经过相关处理计算之后得到返回的,这样的话,页面搜索条件是不能直接通过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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值