从页面实例中检索总元素 - Spring MVC

时间:2016-07-28 18:47:28

标签: java spring spring-mvc

利用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");
}

有什么想法吗?

2 个答案:

答案 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接口访问所有数据,这比仅查询您实际想要的内容效率低。