MyBatis-Plus分页插件IPage的使用展示------分页查询

使用了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;
    }


}
经验分享 程序员 微信小程序 职场和发展