当前位置: 首页 > 工具软件 > iPage > 使用案例 >

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

仇高韵
2023-12-01

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


}
 类似资料: