查询到List后再进行分页(mybatis-plus

如果您需要首先获取符合条件的所有数据,然后在内存中进行筛选,以满足特定条件,而不是在数据库层面进行条件查询,您可以继续使用您的原始实现。但是,为了正确实现分页,您需要对分页结果进行调整。以下是一个可能的改进版本:

java 复制代码
List<SysBeforeUser> sysBeforeUsers = baseMapper.selectList(sysBeforeUserQueryWrapper);
Page<SysBeforeUser> result = new Page<>(pageParam.getCurrent(), pageParam.getSize());

List<SysBeforeUser> pageEnd = new ArrayList<>();

if (!StringUtil.isEmpty(pageParam.getIsVip())) {
    for (SysBeforeUser sysBeforeUser : sysBeforeUsers) {
        if (sysBeforeUser.getIsVip().equals(pageParam.getIsVip())) {
            pageEnd.add(sysBeforeUser);
        }
    }
    result.setRecords(pageEnd.subList(
        (int) result.offset(), 
        Math.min((int) result.offset() + result.getSize(), pageEnd.size())
    ));
    result.setTotal(pageEnd.size());
} else {
    result.setRecords(sysBeforeUsers.subList(
        (int) result.offset(), 
        Math.min((int) result.offset() + result.getSize(), sysBeforeUsers.size())
    ));
    result.setTotal(sysBeforeUsers.size());
}

return result;

在这里,使用了 subList 方法来截取符合分页条件的记录范围,并将其设置为 resultrecords 属性。请注意,由于 subList 的索引参数是基于列表的索引,因此需要将 result.offset() 强制转换为 int 类型。

虽然这种方法可以满足您的需求,但请注意,它在性能上可能不如在数据库层面进行分页查询,特别是在数据量较大的情况下。如果性能是关键考虑因素,建议尽量在数据库层面进行分页查询。

result.setRecords(pageEnd.subList(

(int) result.offset(),

Math.min((int) result.offset() + result.getSize(), pageEnd.size())

));

result.setRecords(sysBeforeUsers.subList(

(int) result.offset(),

Math.min((int) result.offset() + result.getSize(), sysBeforeUsers.size())

));是什么 意思?

这两行代码使用了 Java 中 List 接口的 subList 方法,用于获取原始列表的一个子列表。具体来说,这两行代码的目的是截取符合分页条件的记录范围,并将其设置为 result 对象的 records 属性,即将这个子列表作为查询结果返回。

让我解释一下这两行代码的具体含义:

  1. pageEnd.subList((int) result.offset(), Math.min((int) result.offset() + result.getSize(), pageEnd.size()))

    • pageEnd 是您根据条件筛选得到的 SysBeforeUser 列表。
    • result.offset() 返回当前分页的偏移量,即从哪一条记录开始。
    • Math.min((int) result.offset() + result.getSize(), pageEnd.size()) 确保截取的范围不超过 pageEnd 的实际大小。
    • 因此,这一行代码截取了 pageEnd 列表中,从 result.offset()Math.min((int) result.offset() + result.getSize(), pageEnd.size()) 的子列表,并将其设置为 resultrecords 属性。
  2. sysBeforeUsers.subList((int) result.offset(), Math.min((int) result.offset() + result.getSize(), sysBeforeUsers.size()))

    • sysBeforeUsers 是从数据库中查询得到的所有 SysBeforeUser 列表。
    • result.offset() 返回当前分页的偏移量,即从哪一条记录开始。
    • Math.min((int) result.offset() + result.getSize(), sysBeforeUsers.size()) 确保截取的范围不超过 sysBeforeUsers 的实际大小。
    • 因此,这一行代码截取了 sysBeforeUsers 列表中,从 result.offset()Math.min((int) result.offset() + result.getSize(), sysBeforeUsers.size()) 的子列表,并将其设置为 resultrecords 属性。

这两行代码的目的是为了根据分页信息,从完整的记录集中截取出当前页的记录,以便于设置到 result 对象中返回给调用者。

不过建议还是使用IService的page(page, wrapper)方法,this.page(E page, Wrapper queryWrapper):

java 复制代码
default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper) {
        return this.getBaseMapper().selectPage(page, queryWrapper);
    }
相关推荐
独断万古他化4 分钟前
【SSM开发实战:博客系统】(三)核心业务功能开发与安全加密实现
spring boot·spring·mybatis·博客系统·加密
rannn_11121 分钟前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
qq_124987075324 分钟前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
短剑重铸之日30 分钟前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
若鱼19191 小时前
SpringBoot4.0新特性-Observability让生产环境更易于观测
java·spring
倒流时光三十年1 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
觉醒大王1 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
努力学编程呀(๑•ี_เ•ี๑)1 小时前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
码农小卡拉1 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
向上的车轮1 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net