前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot简明教程--Jpa分页

Spring Boot简明教程--Jpa分页

作者头像
听城
发布2021-02-02 16:58:01
6450
发布2021-02-02 16:58:01
举报
文章被收录于专栏:杂七杂八

分页参数

现在的分页形式有两种:

  • PC端分页,参数为:页码 page和每页的条数 size
  • 小程序、app端分页,参数为:从第几条记录开始请求start,请求记录条数count

依赖

代码语言:javascript
复制
<dependency>
      <groupId>com.github.dozermapper</groupId>
      <artifactId>dozer-core</artifactId>
      <version>6.5.0</version>
</dependency>

定义分页参数业务类

代码语言:javascript
复制
@Getter
@Setter
@Builder
public class PageCounter {
    private Integer page;
    private Integer count;
}

两种参数转换

代码语言:javascript
复制
    public static PageCounter convertToPageParameter(Integer start, Integer count){
       int pageNum = start / count;
        PageCounter pageCounter = PageCounter.builder().page(pageNum).count(count).build();
        return pageCounter;
    }

分页对象构建

代码语言:javascript
复制
@Getter
@Setter
@NoArgsConstructor
public class Paging<T> {
    private Long total;
    private Integer count;
    private Integer page;
    private Integer totalPage;
    private List<T> items;

    public Paging(Page<T> pageT){
        this.initPageParameters(pageT);
        this.items = pageT.getContent();

    }
    void initPageParameters(Page<T> pageT){
        this.total = pageT.getTotalElements();
        this.count = pageT.getSize();
        this.page = pageT.getNumber();
        this.totalPage = pageT.getTotalPages();
    }
}

分页拷贝对象构建

通常情况下直接使用分页对象即可,但是某些时候我们需要将其转化为简化的VO对象,因此可通过该对象直接进行转化

代码语言:javascript
复制
public class PagingDozer<T,K> extends Paging{
    public PagingDozer(Page<T> pageT, Class<K> kClass){
        this.initPageParameters(pageT);
        List<T> tList = pageT.getContent();
        Mapper mapper = DozerBeanMapperBuilder.buildDefault();
        List<K> voList = new ArrayList<>();
        tList.forEach(t->{
            K vo = mapper.map(t,kClass);
            voList.add(vo);
        });
        this.setItems(voList);
    }
}

Controller层

代码语言:javascript
复制
    @GetMapping("/latest")
    public PagingDozer<Spu, SpuSimplifyVO> getLatestSpuList(@RequestParam(defaultValue = "0") Integer start,
                                                            @RequestParam(defaultValue = "10") Integer count){
        PageCounter pageCounter = CommonUtil.convertToPageParameter(start, count);
        Page<Spu> page = this.spuService.getLatestPagingSpu(pageCounter.getPage(), pageCounter.getCount());
        return new PagingDozer<>(page,SpuSimplifyVO.class);
    }

Service层

代码语言:javascript
复制
    public Page<Spu> getLatestPagingSpu(Integer pageNum, Integer size){
        Pageable page = PageRequest.of(pageNum, size, Sort.by("createTime").descending());
        return spuRepository.findAll(page);
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分页参数
  • 依赖
  • 定义分页参数业务类
  • 两种参数转换
  • 分页对象构建
  • 分页拷贝对象构建
  • Controller层
  • Service层
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档