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

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

我希望如果我在我的url中传递1,那么应该有10个结果,如果我传递2,那么接下来的10个结果应该会出现,依此类推。

这是我的

@Transactional public interface PostDao extends CrudRepository{ @Query(getAllPostsByRank) List getAllPostsByRank(); final String getAllPostsByRank= "from Post order by value DESC"; } 

这是我的控制器

 @RequestMapping("/top") @ResponseBody public List getAllPosts(HttpServletRequest req, HttpServletResponse res) throws ServletException { List postobj = postDao.getAllPostsByRank(); return postobj; } 

这是我的url:

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

请建议。

核实。 你的控制器

 @RequestMapping("/top/pages/{pageno}") @ResponseBody public List getAllPosts(@PathVariable("pageno") int pageno, HttpServletRequest req, HttpServletResponse res) throws ServletException { List postobj = postDao.getAllPostsByRank(new PageRequest(pageno,10)); return postobj; } 

你的道

 @Transactional public interface PostDao extends CrudRepository{ @Query(getAllPostsByRank) List getAllPostsByRank(Pageable pageable); final String getAllPostsByRank= "from Post order by value DESC"; } 

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

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

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

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

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

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

在前端,下一页呼叫可以是Next ; 这将返回11到20的post列表。

在Spring Boot中实现分页非常简单,只需要遵循基本步骤 –

1 – 在存储库界面中扩展PagingAndSortingRepository

 public interface UserRepository extends PagingAndSortingRepository  

2 – 方法声明应如下例所示

 Page userList(Pageable pageable); 

3 – Service类中的方法实现应该如下例所示

 @Override public Page userList(Pageable pageable) { return userRepository.findAll(pageable); } 

4 – 控制器类代码应如下所示

 @GetMapping("/list") public String userList(Model model, Pageable pageable) { Page pages = userService.userList(pageable); model.addAttribute("number", pages.getNumber()); model.addAttribute("totalPages", pages.getTotalPages()); model.addAttribute("totalElements", pages.getTotalElements()); model.addAttribute("size", pages.getSize()); model.addAttribute("users", pages.getContent()); return "/user/list"; } 

从前端呼叫应该如下

 http://localhost:8080/application/user/list?page=0&size=5 http://localhost:8080/application/user/list?page=1&size=5 http://localhost:8080/application/user/list?page=2&size=5 

有关详细信息,请观看以下video

Spring Boot:Pagination Basic

Spring Boot:Pagination Advanced

谢谢阅读