【问题标题】:Map stream of Data into Page<T>将数据流映射到 Page<T>
【发布时间】:2023-03-26 12:29:01
【问题描述】:

很长一段时间以来,我都在尝试让以下人员在我的资源/控制器中工作:

拥有数据流,然后将数据流映射到页面响应

Page<SomeType> controllerMethod() {

    List<SomeType> allItems = someRepository.findAll()
                              .filter(something)
                              .collect(Collectors.toList())

    return allItems.map(...?)
}

问题

有没有来自 spring 的助手可以帮助我实现这一目标?

分页不在数据库级别完成就可以了。

【问题讨论】:

  • 如果你使用的是spring数据仓库,你可以将返回类型设为Page&lt;T&gt;,它会自动转换
  • 分页不在数据库级别完成就可以了。答案是否定的,分页应始终在数据库级别进行以提高性能。例如,你有 100 万行,你应该一次性加载吗?
  • 如何确保所有数据都适合一页?如果没有,您将如何处理后续页面?正如其他人提到的,分页应该在 db 级别完成,spring-data 对此提供支持。
  • 有时您有复杂的查询,这些查询无法单独使用 db 查询来实现。例如,您有瞬态属性,可以使用来自 spring 的数据库数据 + 配置参数计算一些“复杂的东西”。然后你需要从数据库中获取最小的子集,然后做一些自定义过滤魔法(基于瞬态道具)。对我来说唯一的问题是:如何将其放入返回的 Page 对象中。

标签: spring spring-boot spring-data-jpa


【解决方案1】:

PageImpl 有来自列表的constructor

Page<SomeType> controllerMethod() {

    List<SomeType> allItems = someRepository.findAll()
                              .filter(something)
                              .collect(Collectors.toList())

    return new PageImpl<>(allItems);
}

【讨论】:

  • 嗨,欢迎来到 Stack Overflow。请在您的答案中添加一些解释,以帮助未来的用户。
  • 谢谢。正是我想要的
猜你喜欢
  • 2023-03-05
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 2014-04-08
  • 2021-08-28
  • 2023-01-30
  • 2016-07-06
相关资源
最近更新 更多