利用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
,以便从底层查询返回每个查询-这可能吗?
我在我的Page
对象上尝试了hasNext()
方法,但它在无休止的循环中运行
while(userPage.hasNext()){
logger.info("Next page found");
}
有什么想法吗?
如果不需要分页,可以忽略spring-Page,直接调用userRepo.findByFirstName("Bob");
这将返回数据库中firstName为bob 的所有用户
您的方法签名应该是
List<User> users = userRepo.findByFirstName("Bob");
希望这能解决您的问题
如果您总是希望所有用户而不是按页面显示,则需要在存储库侧对此进行调整。更改findByFirstName
的签名以返回List<User>
而不是Page<User>
,并删除Pageable参数。然后,它将始终返回所有。请参阅Spring Data文档中有关如何处理参数的更多信息。
如果有时需要分页,有时需要获取所有数据,那么只需添加List<User>
版本即可。返回类型将取决于是否基于Java的常见重载传递Pageable
参数。
Page上的hasNext()
方法只是告诉您下一个页面是否可用(用于显示导航),它不会运行另一个查询。为了通过Pageable接口访问所有数据,您需要构造一个新的Pageable对象,并遍历对Page<User>
版本的几个调用,这比最初只查询实际需要的数据效率低。