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