如何在Spring中过滤PageRequest

时间:2017-03-22 17:53:37

标签: spring spring-data-jpa

当我向我的数据库中的所有新闻发出请求时,我使用这样的PageRequest:

public Page<StatusUpdate> getPageSiteUser(int pageNumber) {

    PageRequest request = new PageRequest(pageNumber-1, pageSize, Sort.Direction.DESC, "added");

    return statusUpdateDao.findAll(request);
}

它显示每个页面中的所有新闻按照完美的顺序排序。

但是现在,我想选择一个用户创建的新闻,采用相同的Pageable格式(不是所有新闻)而且我找不到怎么做,所以我必须在某个地方犯一个愚蠢的错误......它应该像... ...

 public Page<StatusUpdate> findMyStatusUpdates(Long user_id, int pageNumber) {

    PageRequest request = new PageRequest(pageNumber-1, pageSize, Sort.Direction.DESC, "added"); 
    return statusUpdateDao.findAll(request);
}

如果可以的话,请回答理论的链接。文档讨论了排序,而不是进行实际选择(enter link description here

2 个答案:

答案 0 :(得分:3)

您可以将查询(由用户过滤)与可分页请求组合在一起。 Spring可以根据方法名称创建查询。

查看文档:

Spring data JPA Query creation

Using Pageable, Slice and Sort in query methods

在您的情况下,如果没有看到您的代码,我猜您只需要在您的存储库中包含以下方法:

public interface StatusUpdateRepository extends Repository<StatusUpdate, Long> {
  //finBy<column_name>
  Page<User> findByUser(Long userId, Pageable pageable);
}

答案 1 :(得分:0)

您还可以将PageRequest发送到回购中的现有过滤器。您可以创建存储库方法,并根据业务需要对其进行过滤。

假设您要通过提供 user 状态属性来查找帖子,然后按其创建日期对其进行排序按降序

在添加到模型模型之前,可能不希望将所有帖子发送到Pager时都包含在Page对象中。

这完全等效于这样的sql查询:

select * from Post where user=user and status=status order by createdAt desc

-

public interface BlogRepository extends PagingAndSortingRepository<Post, Long> {

Page<Post> findByUserAndStatusOrderByCreatedAtDesc(PageRequest pageRequest, 
User user, boolean status);

}

并在您的控制器中,将其实现(postService)与新的PageRequest对象一起使用:

Page<Post> filteredPosts = postService.findByUserAndStatusOrderByCreatedAtDesc(PageRequest.of(evalPage, evalPageSize), user, status);

这对于2.x.x很好;而您最好将以下内容用于1.x.x

Page<Post> filteredPosts = 
postService.findByUserAndStatusOrderByCreatedAtDesc(new PageRequest(evalPage, 
evalPageSize), user, status);

repo使用分页逻辑等指导了我到这一点。

只需在控制器的参数中将ModelView更改为Model,然后返回String(模板的名称)即可。