![](/img/trans.png)
[英]How can I return date and count of records for that date using spring data jpa?
[英]How can I get all the records for findAll () service using pagination and spring data jpa?
当我们不应用过滤器时,如何使用分页和Spring Data JPA
获取findAll ()
服务的所有记录,它应该返回所有记录而不是按页面显示。我有findAll (Pageable pageable)
服务并从自定义存储库调用它. 是否可以仅使用分页在一页中获取所有记录?
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
扩展。
如果您正在使用 PagingAndSortingRepository 并且仍然想要“事物”列表,
您可以添加一个方法List<Thing> findBy()
如果您有 RepositoryRestResource,它将作为 REST 公开: /things/search/findBy
如果您不需要分页,请使用CrudRepository
而不是PagingAndSortingRepository
现在 PageRequest 构造函数受到保护,您不能使用“新”创建。 你必须调用静态方法:
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>
步骤1:
在您的存储库中,实现接口 JpaSpecificationExecutor,它作为重载的 findAll 方法,接受上面创建的规范对象和页面对象。
The method signature in interface is: Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable);
存储库类如下所示:
@Repository
public interface MyRepository extends
CrudRepository<JobRecord, Long>,
JpaSpecificationExecutor<JobRecord> {
使用谓词实现您的自定义规范
static Specification<JobRecord> findByParam1AndParam2AndParam3(String param1,String param2,String param3) {
return (jobRecord, cq, builder) -> {
List<Predicate> predicates = new ArrayList<>();
predicates.add(builder.equal(jobRecord.get("param1"), "param1"));
predicates.add(builder.equal(jobRecord.get("param2"), "param2"));
predicates.add(builder.equal(jobRecord.get("param3"), "param3"));
// we can add sorting here
cq.orderBy(cb.desc(jobRecord.get("submittedAt")));
// AND all predicates
return builder.and(predicates.toArray(new Predicate[0]));
};
}
第2步:
在您的服务中,创建一个 Pageable 页面对象:
Pageable page = PageRequest.of(0, 5);// 0 is the firstResult and 5 is pageSize which we can fetch from queryParams
findAll 方法可以与分页一起使用:--
List<Job> jobs = repository.findAll(findByParam1AndParam2AndParam3("param1","param2","param3"), page)
.stream()
.map(JobRecord::toModel)
.collect(Collectors.toList());
return new JobList().jobList(jobs);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.