SpringBoot之JPA分页,结合Pageable和Swagger2

JPA分页

​当请求的数据总量很大时,这时候前端往往都会要求后端将数据分页返回。本文介绍SpringBoot下后端数据层使用JPA+MySQL时,如何分页返回数据(除了当前页面的数据,往往还要返回总页数这项数据)。

一、从头到尾自己实现分页:

Controller层:使用@RequestParam绑定page和pageSize参数,调用Service

Service层:

  1. 接收page、pageSize参数,调用Dao获得当前页数据;
  2. 调用Dao获得总数据量,再除以pageSize,获得总页数;
  3. 将当前页数据和总页数包装成VO返回给Controller

DAO层:

  1. 自己写SQL,使用limit语句获取当前页数据;
  2. 使用 select count(1)获得数据总量

可以看到,自己实现分页还是比较麻烦的,不详细写具体代码了,重点介绍下一种方法:

二、使用JPA自带的Pageable和Page:

Controller层:使用Pageable接收参数

    @GetMapping("/byEnterprise")
    public Response<PageVO<QuestionBankVO>> getQuestionBanksByEnterpriseId(@PageableDefault(page = 0, value = 6, sort = {
   
   "createdTime"}, direction = Sort.Direction.DESC) Pageable pageable) {
   
   
        return ResponseFactory.okResponse(questionBankService.getQuestionBanksByEnterpriseId(pageable, 1));
    }
  • Pageable不仅仅支持分页,还支持排序(单字段/多字段均支持)
  • @PageableDefault注解可以为pageable对象设置默认参数,即pageable参数非必须传入,可以利用该注解设置默认值。其中page是页数(从0开始),value是每页数据数量(即pageSize),sort是被排序的字段,direction是升序/降序
  • 访问该RESTful接口时,使用例子:http://localhost:8882/api/v1/questionBanks/byEnterprise?sort=id%2Cdesc&page=0&size=2 (传direction是在字段后加[,asc/desc],eg:id,desc,代表按id降序排列。也可以只写id不写direction,只写sort字段不写direction时,direction默认为asc)

Service层:利用DAO层获得的Page对象,可以获得当前页数据、总页数等信息

    @Override
    public PageVO<QuestionBankVO> getQuestionBanksByEnterpriseId(Pageable pageable, int enterpriseId) 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值