ruoyi对数据二次处理后分页失效

业务场景

正常业务场景下,在service层只做一次查询就能满足需求,若需要分页,只需在Controller层添加继承BaseController,使用startPage()和getDataTable()即可。业务需求存在需要对查询的数据做二次处理。

问题描述

业务需求存在需要对查询的数据做再加工处理,处理过后使用原来的分页时,分页就不对了,总条数total不对。

原因分析

ruoyi使用的是PageHelper分页,查询数据返回的list在开始时使用的startPage(),这个list会存入线程中,使用getDataTable()时new PageInfo(list)时这里的list变成了处理过的listTemp,与线程中的list不同了。

解决方案

1.controler中处理

⭐⭐⭐

public TableDataInfo list(BrhPurchaseOrderReportVo orderReportVo) {

PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        
        List<BrhPurchaseOrderReportVo> list = new ArrayList<>();
        //获取处理好的list集合
        int num = list.size();
        //处理list
        list = list.stream()..某些代码..collect(Collectors.toList());

        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setRows(list);
        rspData.setTotal(num);
        return rspData;
}

2.BaseController中处理

⭐⭐⭐⭐⭐

public class BaseController
{
    ...某些代码
    
    /**
     * 响应请求分页数据
     * 查询后重新处理list再返回时使用
     * @param listVO 处理过的list
     * @param list 未处理的list
     * by wuhb
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    protected TableDataInfo getDataTableNew(List<?> listVO, List<?> list)
    {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setMsg("查询成功");
        rspData.setRows(listVO);
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }
    
    ...某些代码

}

使用

public TableDataInfo list(BrhPurchaseOrderReportVo orderReportVo) {
    startPage();
        //未处理的list
        List<MerPurchaseOrderReportVo> list = purchaseOrderReportService.getMerInfoList(orderReportVo);
        //二次处理过的list
        List<MerPurchaseOrderReportVo> listVo = purchaseOrderReportService.getMerOrderReportList(orderReportVo,list);
        return getDataTableNew(listVo,list);
}

总结

ruoyi框架的分页针对一般查询足够了,但对于需要处理的查询结果需要稍微调整下。这里推荐第2个解决方案,对代码没有侵入性且复用性高,不用每个controler都写一遍。

### 回答1: mybatisplus的page分页失效可能是由于以下原因引起的: 1.未正确创建或配置分页对象; 2.SQL语句的LIMIT或OFFSET参数错误; 3.调用分页查询方法时,未传入正确的分页参数; 4.数据库连接池配置不正确导致分页查询超时或失败。 解决方法包括:正确创建并配置分页对象、检查SQL语句中的LIMIT或OFFSET参数、传入正确的分页参数、调整数据库连接池配置等。 ### 回答2: mybatis-plus的分页失效可能涉及以下几个方面的原因: 1. 配置问题:检查是否在mybatis-plus的配置文件中正确配置了分页插件。在配置文件中需要添加`<plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">...</plugin>`来启用分页插件。 2. 分页参数传递问题:确保在查询方法中正确传递了分页参数。一般来说,分页参数可以通过`Page`对象来传递,包括`current`(当前页码)和`size`(每页记录数)两个属性。 3. 查询方法问题:确认查询方法是否使用了mybatis-plus提供的分页查询方法。例如,可以使用`Page`对象作为方法的参数,并在查询时使用`selectPage`方法来执行分页查询。 4. 数据库驱动问题:某些数据库可能存在不兼容的问题,尤其是在进行分页查询时。如果是这种情况,可以尝试升级数据库驱动或使用其他兼容性更好的驱动。 5. SQL语句问题:检查生成的SQL语句是否正确,包括是否正确添加了分页限制条件。可以通过打印生成的SQL语句来进行检查,或者使用mybatis-plus提供的调试方法来查看生成的SQL语句。 如果以上方法都无法解决分页失效的问题,可以考虑搜索相关的错误信息或查看mybatis-plus的官方文档以获取更多帮助。另外,也可以在相关的技术论坛或社区中提问,寻求其他开发者的帮助。 ### 回答3: MyBatis Plus是一款针对MyBatis框架的增强工具,在使用中可以提供更为便捷的操作方式。在使用MyBatis Plus的Page分页功能时,如果分页失效,则可能存在以下几种原因: 1. 代码问题:可能是代码中对Page对象的使用不当导致分页失效。首先,需要确认是否正确调用了Page对象的相关方法,如传入正确的分页参数(页码、每页数据量);其次,需要确保在执行查询方法时传入了正确的Page对象。 2. 数据库驱动问题:某些数据库驱动可能不完全支持分页功能,因此需要确认使用的数据库驱动是否与MyBatis Plus兼容。可以尝试升级或更换数据库驱动版本来解决该问题。 3. SQL语句问题:MyBatis Plus的分页功能是通过在SQL语句中添加相应的分页查询条件来实现的。可能是SQL语句编写不正确导致分页失效。需要确认SQL语句中是否包含正确的分页查询条件,如LIMIT(MySQL)、ROWNUM(Oracle)等,并确保这些条件是按照正确的语法和位置添加的。 4. 记录总数问题:MyBatis Plus分页功能在查询数据时会同时查询总记录数。如果总记录数查询失败,可能会导致分页失效。需要确保数据库中的查询语句正确,可以单独执行一次总记录数的查询语句来确认。 5. 其他配置问题:可能是在配置MyBatis Plus时忽略了某些关键配置项,如分页插件的引入、分页插件的配置等。需要确认是否正确配置了分页插件,并确保所使用的MyBatis Plus版本与配置兼容。 在解决分页失效问题时,应逐步排查以上可能原因,通过日志、调试等方式定位具体问题所在,并采取相应的解决措施。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值