使用了Mybatis-plus的分页插件----IPage:
IPage 需要在dao层传入IPage的实现类Page对象,该对象实现了IPage
IPage内部原理是基于拦截器,拦截的是方法以及方法中的参数,会判断是否是查询操作。如果是查询操作,才会进入分页的逻辑处理。
进入分页的逻辑处理后,拦截器会通过反射获取该方法的参数进行判断是否存在IPage对象的实现类。如果不存在就不进行分页,存在则将该参数赋值给IPage对象。
然后进行拼接sql处理完成分页操作。
但是使用IPage需要注入一个Bean拦截器交给spring进行管理,否则不会进行拦截。
(注:MP另一个分页插件是PageHelper,不在此详细解释)
service:
IPage<ESlideshow> getAll(IPage<Object> page);
serviceImpl:
@Override
public IPage<ESlideshow> getAll(IPage<Object> page) {
IPage<ESlideshow> eSlideshowIPage= eSlideshowMapper.getAllPage(page);
return eSlideshowIPage;
}
mapper:
@Select("SELECT * FROM e_slideshow WHERE is_deleted =0")
IPage<ESlideshow> getAllPage(IPage<Object> page);
controller:
@GetMapping("/all")
public Result<Object> getAll(PageVO pageVO){
IPage<ESlideshow> all=eSlideshowService.getAll(pageVO.buildPage());
return Result.success(all);
}
PageVO:
@Data
@ApiModel(value = "分页", description = "orders传参实例:[{'column': 'create_time','asc': false},{'column': 'name','asc': " +
"true}]")
public class PageVO {
/**
* 当前页
*/
@ApiModelProperty(value = "当前页")
private Integer current;
/**
* 当前页显示数据的条数
*/
@ApiModelProperty(value = "当前页显示数据的条数")
private Integer size;
/**
* 获取排序信息,排序的字段和正反序
*/
@ApiModelProperty(value = "排序方式。(默认【创建时间倒序】:[{'column': 'create_time','asc': false}])。",
notes = "例子:[{'column': 'create_time','asc': false},{'column':'name','asc': true}]"
)
private String orders;
/**
* 当前页默认值为1
*/
public Integer getCurrent() {
return current = (current == null || current <= 0) ? 1 : current;
}
/**
* 每页大小默认为10
*/
public Integer getSize() {
return size = (size == null || size == 0) ? 10 : size;
}
/**
* description:将orders(json数组字符串)转为List
*/
public List<OrderItem> generateOrderList() {
List<OrderItem> orderItemList = new ArrayList<>();
if (StrUtil.isBlank(getOrders())) {
orderItemList.add(OrderItem.desc("create_time"));
} else {
try {
orderItemList = JSONArray.parseArray(orders, OrderItem.class);
} catch (Exception e) {
throw new BadRequestException("分页排序参数orders不合法,请传正确的参数格式——['column':'','asc':'true/false']");
}
}
return orderItemList;
}
/**
* description:根据pageVO构建分页查询IPage
* @return IPage查询条件
*/
public <K> IPage<K> buildPage() {
Page<K> page = new Page<>(getCurrent(), getSize());
page.addOrder(generateOrderList());
return page;
}
}