Spring Boot簡(jiǎn)明教程--Jpa分頁(yè)

分頁(yè)參數(shù)

現(xiàn)在的分頁(yè)形式有兩種:

  • PC端分頁(yè),參數(shù)為:頁(yè)碼 page和每頁(yè)的條數(shù) size
  • 小程序、app端分頁(yè),參數(shù)為:從第幾條記錄開始請(qǐng)求start,請(qǐng)求記錄條數(shù)count

依賴

<dependency>
      <groupId>com.github.dozermapper</groupId>
      <artifactId>dozer-core</artifactId>
      <version>6.5.0</version>
</dependency>

定義分頁(yè)參數(shù)業(yè)務(wù)類

@Getter
@Setter
@Builder
public class PageCounter {
    private Integer page;
    private Integer count;
}

兩種參數(shù)轉(zhuǎn)換

    public static PageCounter convertToPageParameter(Integer start, Integer count){
       int pageNum = start / count;
        PageCounter pageCounter = PageCounter.builder().page(pageNum).count(count).build();
        return pageCounter;
    }

分頁(yè)對(duì)象構(gòu)建

@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();
    }
}

分頁(yè)拷貝對(duì)象構(gòu)建

通常情況下直接使用分頁(yè)對(duì)象即可,但是某些時(shí)候我們需要將其轉(zhuǎn)化為簡(jiǎn)化的VO對(duì)象,因此可通過(guò)該對(duì)象直接進(jìn)行轉(zhuǎn)化

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層

    @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層

    public Page<Spu> getLatestPagingSpu(Integer pageNum, Integer size){
        Pageable page = PageRequest.of(pageNum, size, Sort.by("createTime").descending());
        return spuRepository.findAll(page);
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容