偌依框架的分页失效改用手动作分页

标题一:先说一下为什么会分页失效

从代码层面来分析一下

java 复制代码
public TableDataInfo extremum(@RequestBody HashMap<String, Object> param){
        Integer pageNum = Integer.valueOf(param.get("pageNum").toString());
        Integer pageSize = Integer.valueOf(param.get("pageSize").toString());

		/**在这使用了偌依的代码分页线程*/
        startPage(pageNum, pageSize);
        /**该线程被作用在了该list集合上,对象被消耗了*/
        List<TrendVibrationReport> list = new ArrayList<>();
        try {
            list = trendVibrationReportService.selectMapListExtremum(param);
        }catch (Exception e){
            e.printStackTrace();
        } finally {
            if (list == null || list.size() == 0){
                return getDataTable(new ArrayList<>());
            }
        }
		/**重新拼接出了另外一个集合,上面的分页线程被消耗了,就不可以再进行分页了*/
        List<HashMap<String, Object>> hashMapList = new ArrayList<>();
        try {
            hashMapList = trendVibrationReportService.selectMapListExtremumTow(list);
        }catch (Exception e){
            e.printStackTrace();
        } finally {
            if (hashMapList == null || hashMapList.size() == 0){
                return getDataTable(new ArrayList<>());
            }
        }

        return getDataTable(hashMapList, list);
    }

上面通过代码和注解可以看到失效的原因。

2.如何解决的呢?

我采用的是手动进行的分页操作,当然办法也有很多,可以使用mybatispuls自带的分页等等。。。

java 复制代码
public TableDataInfo extremum(@RequestBody HashMap<String, Object> param){

        List<TrendVibrationReport> list = trendVibrationReportService.selectMapListExtremum(param);

        if (list == null || list.size() == 0){
            return new TableDataInfo();
        }

        List<HashMap<String, Object>> hashMapList = new ArrayList<>();
        try {
            hashMapList = trendVibrationReportService.selectMapListExtremumTow(list);
        }catch (Exception e){
            e.printStackTrace();
        }

        if (hashMapList == null || hashMapList.size() == 0){
            return new TableDataInfo();
        }

        // 手动分页
        long pageNum = Integer.valueOf(param.get("pageNum").toString());
        long pageSize = Integer.valueOf(param.get("pageSize").toString());
        // 总共条数
        int num = hashMapList.size();
        /**该方法是把所有的数据查出后在内存中进行的分页截取,对于特别大的数据量还是有一定的不友好的。*/
        hashMapList = hashMapList.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setRows(hashMapList);
        rspData.setTotal(num);
        return rspData;
    }

hashMapList = hashMapList.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());

使用的是stream()流,然后截取,再用转为集合,具体的java8的新特性可以私下学学真的很有用。

相关推荐
摇滚侠19 分钟前
Spring Boot3零基础教程,Lambda 表达式与函数式接口,笔记95
java·spring boot·笔记
好学且牛逼的马23 分钟前
【JavaWeb|day19 Web后端进阶 SpringAOP、SpringBoot原理、自定义Starter、Maven高级】
java·spring boot·rpc
码界奇点24 分钟前
Java 开发日记MySQL 与 Redis 双写一致性策略挑战与实战解析
java·redis·sql·mysql·java-ee
GHZero31 分钟前
Java 之解读String源码(九)
java·开发语言
Swift社区34 分钟前
Lombok 不生效 —— 从排查到可运行 Demo(含实战解析)
java·开发语言·安全
南清的coding日记36 分钟前
Java 程序员的 Vue 指南 - Vue 万字速览(01)
java·开发语言·前端·javascript·vue.js·css3·html5
@大迁世界1 小时前
我用 Rust 重写了一个 Java 微服务,然后丢了工作
java·开发语言·后端·微服务·rust
自在极意功。1 小时前
Java static关键字深度解析
java·开发语言·面向对象·static
菜鸟的迷茫1 小时前
Feign 超时 + 重试引发雪崩:一次线上事故复盘
java·后端
milanyangbo1 小时前
谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑
java·服务器·开发语言·jvm·后端·算法·架构