如何在Spring Boot中选择理想的分页方式?

时间:2018-06-29 08:57:50

标签: java angular hibernate spring-boot jpa

我需要您的分页建议。

我的表数据很长。因此我使用分页和每一个分页操作İ从数据库调用数据
我在spring-boot应用程序中有一个rest方法。
这种方法可以从数据库中获取数据,一切正常。
我需要分页计数(所有数据计数/每页计数)。
我可以从数据库中找到此计数。
我必须为allCount和下面的方法编写两个单独的方法吗?

如何在Spring Boot中使用理想的分页方法?

  @CrossOrigin(maxAge = 3600)
    @RequestMapping(value = "/payment/all", method = RequestMethod.POST)
    public List<NotaryPaymentInformationEntity> getAllProduct(@RequestBody PaginationModel pag){
        try {
            System.out.println(pag.getPageno()+ " " + pag.getRecords());
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Pageable pageable = new PageRequest(pag.getPageno(), pag.getRecords());
        System.out.println("here"+notaryPaymentRepository.findAll(pageable).getContent().size());
        return notaryPaymentRepository.findAll(pageable).getContent();
    }




public interface NotaryPaymentRepository  extends JpaRepository<NotaryPaymentInformationEntity,Integer>{


}

enter image description here

2 个答案:

答案 0 :(得分:3)

您可以在Page类obj中获得查询的响应,该类扩展了Slice类并提供了所需的所有方法。

Pageable pageable = new PageRequest(pageNo, PAGE_SIZE);

pageNo和PAGE_SIZE需要从客户端发送

@Query(value = "SELECT h FROM {NameOfYourModelClass} h")
Page<HorseWatch> getPaginatedModel(Pageable pageable);

从您的服务类中调用此方法,然后在Page对象中对其进行检索

您可以使用(使用 getContent() getNumber() getTotalPages()来自对象)

将这些值保存在响应类中,然后将此类发送回客户端

public class PageResponse {
    private List<{NameOfModelClass}> content;
    private int currentPage;
    private int totalPages;
}

答案 1 :(得分:1)

您需要分页支持,然后添加参数Pageable pageable

    @CrossOrigin(maxAge = 3600)
    @RequestMapping(value = "/payment/all", method = RequestMethod.POST)
    public List<NotaryPaymentInformationEntity> getAllProduct(Pageable pageable){
        try {
            System.out.println(pag.getPageno()+ " " + pag.getRecords());
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //NO pageable object need to be manually constructed
        return notaryPaymentRepository.findAll(pageable).getContent();
    }

和URL现在可以具有额外的查询参数,例如 / payment / all?page = 2&size = 10

如果您使用Spring数据REST,那么您将获得HATEOAS支持,这将为您提供更多有关总计数以及所处页面的信息,等等。但是响应将采用HAL格式。 参考: https://docs.spring.io/spring-data/rest/docs/current/reference/html/#paging-and-sorting