利用Spring Framework的Page
界面,我可以使用以下代码一次检索50个用户:
int page = 0;
int pageSize = 50;
Page<User> userPage = userRepo.findByFirstName("Bob", page, pageSize);
List<User> userList = userPage.getContent();
这会在后台运行一些查询,以便在我的数据库中为我提供前50位用户。我想要做的是填充我的userList
,不用 分页,以便从基础查询返回每一个 - 这可能吗?
我在我的hasNext()
对象上尝试了Page
方法,但它在无限循环中运行
while(userPage.hasNext()){
logger.info("Next page found");
}
有什么想法吗?
答案 0 :(得分:1)
如果您不想分页,可以忽略spring Page并直接调用userRepo.findByFirstName("Bob");
这将返回firstName为bob的数据库中的所有用户
您的方法签名应为
List<User> users = userRepo.findByFirstName("Bob");
希望这能解决你的问题
答案 1 :(得分:1)
如果您总是想要所有用户而不是页面,则需要在Repository端进行调整。将findByFirstName
的签名更改为返回List<User>
而不是Page<User>
,并删除Pageable参数。然后,它将永远返回所有。查看有关how parameters are handled in the Spring Data documentation的更多信息。
如果您有时需要分页并有时获取所有数据,那么只需添加List<User>
版本即可。返回类型取决于您是否根据Java通常的重载传递Pageable
参数。
页面上的hasNext()
方法仅告诉您下一页是否可用(用于呈现导航),它不会运行另一个查询。您需要构造一个新的Pageable对象并迭代几次对Page<User>
版本的调用,以便通过Pageable接口访问所有数据,这比仅查询您实际想要的内容效率低。