【问题标题】:How to filter a PageRequest in spring如何在春季过滤PageRequest
【发布时间】:2017-03-22 17:53:36
【问题描述】:

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

public Page<StatusUpdate> getPageSiteUser(int pageNumber) {

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

    return statusUpdateDao.findAll(request);
}

它显示了每个页面中的所有新闻都以完美的顺序排序。

但是现在,我想选择一个用户创建的新闻,以相同的可分页格式(不是所有新闻),我不知道该怎么做,所以我一定是在某个地方犯了一个愚蠢的错误......应该是……

 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)

【问题讨论】:

    标签: spring spring-data-jpa


    【解决方案1】:

    您可以将查询(按用户过滤)与可分页请求相结合。 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);
    }
    

    【讨论】:

    • 非常感谢,这就是解决方案,虽然它不起作用。它给我一个错误的参数说:异常:org.springframework.dao.InvalidDataAccessApiUsageException:参数值[3]与预期类型不匹配......所以我要添加另一个问题。
    【解决方案2】:

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

    假设您想通过提供 userstatus 属性来查找帖子,然后按其创建日期排序以降序

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

    这完全等同于一个 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 这个repo 通过分页逻辑等将我引导到了某个点。

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

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 1970-01-01
      • 2020-09-25
      • 2016-05-30
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多