如何在具有休眠状态的弹簧靴中实现分页

2022-09-03 08:47:47

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

我想如果我在我的网址中传递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";
}

这是我的控制器

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

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

这是我的网址:

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

请建议。


答案 1

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

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

默认情况下,此类使用 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

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


答案 2

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

1 - 在存储库界面中扩展分页和排序存储库

public interface UserRepository extends PagingAndSortingRepository <User, Long> 

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

Page<User> userList(Pageable pageable);

3 - 服务类中的方法实现应如下例所示

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

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

@GetMapping("/list")
public String userList(Model model, Pageable pageable) {
        Page<User> 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

有关更多详细信息,请观看以下视频

弹簧靴:分页基础

弹簧靴:分页高级

感谢您的阅读