当我向我的数据库中的所有新闻发出请求时,我使用这样的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)
答案 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(模板的名称)即可。