如何在jpa和PagingAndSortingRepository中设置每页的限制结果?

时间:2017-09-22 17:45:05

标签: mysql spring hibernate spring-boot spring-data-jpa

有一个Spring Boot Blog项目,需要在主页面显示最新的收藏帖子,在数据库中有一个带有帖子的表和一个带有布尔值的列(tinyint)show_in_main_page,它定义了帖子是否显示在主页面中页面与否。

在java控制器中获取dinamicaly小部件并获取每个小部件的最新收藏帖子,每个小部件都有一个foreach,但每个小部件需要获得1个或更多帖子,我使用PagingAndSortingRepository和Page<>结果,在控制器调用nextPageable()和下一个最后最喜欢的帖子时。

如何为存储库中的每个页面设置1个结果?如何使用每页的结果数量来制作一个dinamicaly函数?例如:当3为dinamicaly值时,调用存储库以从控制器调用的页面获得3个结果。

我的界面是:

public interface PostRepository extends PagingAndSortingRepository<PostEntity, Long>{
    Page<PostEntity> findAll(Pageable pageable);
    Page<PostEntity> findByShowInMainPage(Boolean showInMainPage); // <--
}

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您需要PageRequest

Page<PostEntity> postEntityPage = findAll(new PageRequest(0, 3));

它在页面中获取第一个(0)页面,其中包含三个PostEntity

答案 1 :(得分:0)

如果您尝试从控制器获取分页,只需在Pageable的控件上添加一个参数即可。例如

@RequestMapping(value = "{username}", method = RequestMethod.GET, produces = MediaType.TEXT_HTML_VALUE)
    public String entries(@PathVariable(PATH_USERNAME) final String username,
                          final Pageable pageable,
                          final Model model) {
...

这将在控制器上自动为您提供页面和大小的参数。因此,URL看起来像/ users / myusername?page = 1&amp; size = 3并返回前3个结果。设置页面= 2将获得接下来的3个结果,依此类推。

然后,您可以将可分页变量传递到存储库的findAll方法以获取数据。