Mybatis-Plus(MP)在若依plus中加装MPJ进行列表分页

首先我们来看看若依plus中为我们提供的分页插件:

 分页插件在公共模块中,该类中定义了分页中需要的实体如:

 /**
     * 分页大小
     */
    private Integer pageSize;

    /**
     * 当前页数
     */
    private Integer pageNum;

    /**
     * 排序列
     */
    private String orderByColumn;

    /**
     * 排序的方向desc或者asc
     */
    private String isAsc;

    /**
     * 当前记录起始索引 默认值
     */
    public static final int DEFAULT_PAGE_NUM = 1;

    /**
     * 每页显示记录数 默认值 默认查全部
     */
    public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;

小编这里采用Apifox为大家演示前端传入的参数:

 通过前端传入pageSize和pageNum我们则利用这些参数来作为条件进行分页。

若依plus中为我们提供了MP的分页查询方法:

 

 /**
     * 分页查询VO
     */
    default <C, P extends IPage<C>> P selectVoPage(IPage<T> page, Wrapper<T> wrapper, Class<C> voClass) {
        IPage<T> pageData = this.selectPage(page, wrapper);
        IPage<C> voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal());
        if (CollUtil.isEmpty(pageData.getRecords())) {
            return (P) voPage;
        }
        voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass));
        return (P) voPage;
    }

在不需要关联查询的情况下使用MP提供的方法进行分页查询,在效率不变的情况下可以让我们代码更简洁。

如果是复杂sql查询,使用我们的MPJ为我们提供的关联查询会更加灵活,下面小编为大家提供自己使用的案例:

 //构建MPJ分页
        IPage<QyInformationVo> page = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()),QyInformationVo.class,
            new MPJLambdaWrapper<QyInformation>()
                .select(QyInformation::getId)
                .select(QyInformation::getUserId)
                .selectAll(QyInformation.class)
                //加装条件,判断业务条件小于6
                .lt(QyInformation::getReplyStatus,"6")
                //添加查询条件
                .like(StringUtils.isNotBlank(qyInformation.getTitle()), QyInformation::getTitle, qyInformation.getTitle())
                .like(StringUtils.isNotBlank(qyInformation.getBusinessType()), QyInformation::getBusinessType, qyInformation.getBusinessType())
                .like(StringUtils.isNotBlank(qyInformation.getBelongArea()), QyInformation::getBelongArea, qyInformation.getBelongArea())
                .likeRight(StringUtils.isNotBlank(qyInformation.getAreaCode()), QyInformation::getAreaCode, qyInformation.getAreaCode())
                .eq(StringUtils.isNotBlank(qyInformation.getReplyStatus()), QyInformation::getReplyStatus, qyInformation.getReplyStatus())
                .like(StringUtils.isNotBlank(qyInformation.getUserName()), SysUser::getUserName, qyInformation.getUserName())
                .like(StringUtils.isNotBlank(qyInformation.getEnterpriseName()), SysUser::getEntName, qyInformation.getEnterpriseName())
                //将右连接查询出的数据赋值给information对应的实体参数
                .selectAs(SysUser::getUserName,"userName")
                .selectAs(SysUser::getEntName,"enterpriseName")
                .selectAs(SysUser::getNickName,"nickName")
                .leftJoin(SysUser.class,SysUser::getUserId,QyInformation::getUserId)
                //根据业务的创建时间进行倒序
                .orderByDesc(QyInformation::getCreateTime)
        );
        //将返回的分页查询重新build
        return TableDataInfo.build(page);

查询条件利用lambda表达式来构建条件,like和eq前端可用于条件查询,而lt可以对参数实体进行条件约束,更为灵活的应对前端所需求的查询展示,同时selectAs能将关联查询出的实体对象赋值给主对象对应的参数。

MPJ分页查询返回的对象是IPage,我们还需要利用若依plus提供的表格分页数据对象来进行重构:

 将返回的参数重定义为TableDataInfo对应的参数:

  * 总记录数
     */
    private long total;

    /**
     * 列表数据
     */
    private List<T> rows;


    /**
     * 消息状态码
     */
    private int code;

    /**
     * 消息内容
     */
    private String msg;

 如果直接返回IPage对象那么返回的参数是:

    /**
     * 分页记录列表
     *
     * @return 分页对象记录列表
     */
    List<T> getRecords();

    /**
     * 设置分页记录列表
     */
    IPage<T> setRecords(List<T> records);

    /**
     * 当前满足条件总行数
     *
     * @return 总条数
     */
    long getTotal();

    /**
     * 设置当前满足条件总行数
     */
    IPage<T> setTotal(long total);

    /**
     * 获取每页显示条数
     *
     * @return 每页显示条数
     */
    long getSize();

    /**
     * 设置每页显示条数
     */
    IPage<T> setSize(long size);

    /**
     * 当前页
     *
     * @return 当前页
     */
    long getCurrent();

    /**
     * 设置当前页
     */
    IPage<T> setCurrent(long current);    /**
     * 分页记录列表
     *
     * @return 分页对象记录列表
     */
    List<T> getRecords();

    /**
     * 设置分页记录列表
     */
    IPage<T> setRecords(List<T> records);

    /**
     * 当前满足条件总行数
     *
     * @return 总条数
     */
    long getTotal();

    /**
     * 设置当前满足条件总行数
     */
    IPage<T> setTotal(long total);

    /**
     * 获取每页显示条数
     *
     * @return 每页显示条数
     */
    long getSize();

    /**
     * 设置每页显示条数
     */
    IPage<T> setSize(long size);

    /**
     * 当前页
     *
     * @return 当前页
     */
    long getCurrent();

    /**
     * 设置当前页
     */
    IPage<T> setCurrent(long current);

    /**
     * 老分页插件不支持
     * <p>
     * MappedStatement 的 id
     *
     * @return id
     * @since 3.4.0 @2020-06-19
     */
    default String countId() {
        return null;
    }

MyBatis-Plus官网为我们提供了每个参数的详细阐述:

最后也希望小编的案例能够为大家带来帮助和进步,与大家一起共同进步,同时也希望大家多多支持小编,给小编点点赞,感谢大家的支持!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫玥筱筱

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值