如何使用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
谢谢阅读
- 生成的序列以1而不是1000开始,在注释中设置
- 针对不同字段值长度的Hibernate Criteria
- java hibernate:在多态hql查询中选择discriminator列
- Hibernate和@JoinFormula:org.hibernate.mapping.Formula无法强制转换为org.hibernate.mapping.Column
- 你如何使用注释在hibernate中映射“地图”?
- Hibernate无法初始化代理 – 没有Session
- 如果在hibernate中查询参数为null或为空,如何处理?
- Hibernatevalidation器在正则表达式匹配上吃CPU
- 使用@IdClass和*嵌套*复合主键限制JPA 1.0?