如何使用分页和弹簧数据jpa获取findAll()服务的所有记录?

时间:2017-01-27 10:44:54

标签: java spring spring-data-jpa

如果我们不应用过滤器,我如何获取findAll ()服务的所有记录?Spring Data JPA当我们不应用过滤器时,它应返回所有记录而不是逐页显示。我有findAll (Pageable pageable)服务并从自定义存储库调用它。是否可以仅使用分页在一个页面中获取所有记录?

4 个答案:

答案 0 :(得分:4)

public interface UserRepository extends PagingAndSortingRepository<User, Long> {
    //Page<User> findAll(Pageable pageable); is already in this repository.
}

所以,如果你想找到第20页的第一页,请尝试:

Page<User> users = repository.findAll(new PageRequest(0, 20));

如果您想要做的是将所有实体放在一个页面上,那么它没有多大意义,但可以分两步完成:

int count = repository.count();
Page<User> users = repository.findAll(new PageRequest(0, count));

count()来自CrudRepository,由PagingAndSortingRepository扩展。

答案 1 :(得分:1)

如果您不需要分页,请使用CrudRepository代替PagingAndSortingRepository

答案 2 :(得分:0)

如果您正在使用PagingAndSortingRepository但仍需要“事物”列表,

您可以添加方法List<Thing> findBy()

如果您有RepositoryRestResource,它将作为REST公开:/things/search/findBy

答案 3 :(得分:0)

现在,PageRequest构造函数受到保护,您无法使用“ new”创建。 您必须调用静态方法:

PageRequest.of(int page, int size)
PageRequest.of(int page, int size, @NotNull Sort sort)
PageRequest.of(int page, int size, @NotNull Direction direction, @NotNull String... properties)

解决方案如下:

Page<User> users = repository.findAll(PageRequest.of(0, 20));

当然,您的UserRepository接口应该从PagingAndSortingRepository扩展:

public interface UserRepository extends PagingAndSortingRepository<User, Long>