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