如何使用分页按顺序返回

时间:2021-05-09 11:42:22

标签: java spring spring-boot hibernate

我有 findPaginated 方法,每 20 条记录添加一次分页。新记录必须位于顶部,因此我将 findAllByOrderByIdDesc(); 添加到我的存储库中,并且在没有分页的情况下一切正常,但我不知道如何将两者连接起来。

在我的InfoService

public Page<Info> findPaginated(int pageNo, int pageSize) {
        Pageable pageable = PageRequest.of(pageNo -1, pageSize);
        return this.infoRepo.findAll(pageable);
    }

我不知道如何制作这样的东西:return this.infoRepo.findAllByOrderByIdDesc(pageable)); ...

在我的InfoController

@GetMapping("/info/list")
    public String showInfo (Model model) {
        model.addAttribute("infos", infoRepo.findAllByOrderByIdDesc());
        return findPaginated(1, model);
    }

//...

@GetMapping("info/list/page/{pageNo}")
    public String findPaginated(@PathVariable(value = "pageNo") int pageNo, Model model) {

        int pageSize = 20;
        Page<Info> page = infoService.findPaginated(pageNo, pageSize);
        List<Info> infos = page.getContent();

        model.addAttribute("currentPage", pageNo);
        model.addAttribute("totalPages", page.getTotalPages());
        model.addAttribute("totalElements", page.getTotalElements());

        model.addAttribute("infos", infos);
        return "info";
    }

更改前的这部分工作正常

@GetMapping("/info/list")
    public String showInfo (Model model) {
        model.addAttribute("infos", infoRepo.findAllByOrderByIdDesc());
        return "info";
    }

所以我添加了 return findPaginated(1, model); 以每 20 条记录进行分页,但我卡住了,不知道如何正确连接以使其正常工作。

信息

Entity
public class Info {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String text;

1 个答案:

答案 0 :(得分:1)

您可以按如下方式向 PageRequest 添加订单:

PageRequest.of(pageNo -1, pageSize, Sort.Direction.DESC, "id");

这样分页结果将按“id”字段和顺序方向 DESC 排序。

然后像往常一样使用您的 infoRepo#findAll 方法。

public Page<Info> findPaginated(int pageNo, int pageSize) {
        Pageable pageable = PageRequest.of(pageNo -1, pageSize, Sort.Direction.DESC, "id");
        return this.infoRepo.findAll(pageable);
}