java - 如何使用hibernate在spring boot中实现分页

标签 java hibernate pagination spring-boot hql

我正在使用 spring boot 和 hibernate,我想在我的项目中使用分页。我在谷歌上搜索并看到了很多例子,但我无法在我的项目中实现它。

我想如果我在我的 url 中传递 1 那么应该有 10 个结果,如果我通过 2 那么接下来的 10 个结果应该来等等。

这是我的

@Transactional
public interface PostDao extends CrudRepository<Post, Long>{

@Query(getAllPostsByRank)
List<Post> getAllPostsByRank();

final String getAllPostsByRank= "from Post order by value DESC";
}

这是我的 Controller

@RequestMapping("/top")
    @ResponseBody 
     public List<Post> getAllPosts(HttpServletRequest req, HttpServletResponse res) throws ServletException {

List<Post> postobj = postDao.getAllPostsByRank();
return postobj;
}

这是我的url:

http://localhost:8888/v1.0/post/top/1

请提出建议。

最佳答案

我会考虑使用 org.springframework.data.domain.Pageable直接进入你的 Controller 。然后可以将该对象传递到您的 JPA 层,它将在其中处理返回结果的数量和大小。

使用 Pageable 的好处是它返回 Page可以在前端使用的对象,以形成上一页/下一页逻辑。

默认情况下,此类使用 url 参数“page”和“size”;因此 page=0&size=10 将返回前 10 个项目。

因此在您的情况下,代码可能类似于:

@ResponseBody
@RequestMapping("/top/pages/")
public List<Post> getAllPosts(@PageableDefault(value=10, page=0) Pageable pageable) throws ServletException {
    Page page = postDao.findAll(pageable);
    return page.getContent();
}

注意注释 @PageableDefault只是设置默认值,这不是必需的。

在前端下一页调用可以是<a href="/top/pages?page=1">Next</a> ;这将返回从 11 到 20 的帖子列表。

关于java - 如何使用hibernate在spring boot中实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32434058/

相关文章:

c# - 以编程方式查明系统是否支持待机

ruby-on-rails - 在没有 will_paginate gem 的情况下在 Ruby 中实现分页

cakephp - 自定义 cakephp 分页以使用 Solr 查询

javascript - 如何向按钮添加多个 jlabel?

java - 尝试同时保存到两个数据库时,找不到当前线程的 session 错误

java - 无法更新实体

php - Codeigniter 3 分页错误 : the second page shows records 3 to 13 instead of 11 to 20

java - 将 jruby 脚本打包为带有注释的 .jar

java - 无法在 SonarQube 中进行本地分析

带有线性渐变的 Java Swing 哑光边框?