MybatisPlus 从2.x到3.x,xml自定义分页,3种分页方法

版权声明:襄阳雷哥的版权声明 https://blog.csdn.net/FansUnion/article/details/89192879

最近研究MybatisPlus,又遇到了分页问题。

原项目用的是2.x,想直接用3.x,发现 自定义的xml分页查询,迁移过来后,不能使用。

官方3.x 用法如下

2.x 代码,能直接识别 ReceivableVo参数中的 字段。

List<ReceivableVo> selectReceivableList(Page page,ReceivableVo condition);

  <select id="selectReceivableList" parameterType="ReceivableVo" resultMap="ReceivableResultMap">

 <if test="types!=null">
            AND t.type IN
            <foreach collection="types" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

<select>

3.x代码,需要用 condition.types 这种形式,太麻烦了。只有一个参数的情况下,2.x要简单一些。

List<ReceivableVo> selectReceivableList(Page page,@Param("condition") ReceivableVo condition);

  <select id="selectReceivableList" parameterType="ReceivableVo" resultMap="ReceivableResultMap">

 <if test="condition.types!=null">
            AND t.type IN
            <foreach collection="types" open="(" close=")" index="index" item="item" separator=",">
                #{item}
            </foreach>
        </if>

<select>

但是如果用这种写法,所有的xml语句都得重写,工作量巨大,sql维护起来也麻烦了不少。

另外一种方式,使用 PageHelper插件分页,分页之后,分页对象转换成 MybatisPlus的Page对象。

保证 方法的 输入和输出格式不变。

2.x和3.x Page对象序列化之后, 字段名称一致。

 @Override
    public Page<ReceivableVo> getReceivablePage(Page page, ReceivableVo receivableVo) {
        log.debug("应收列表查询,ReceivableVo:{},Page:{}", receivableVo, page);
        PageHelper.startPage((int)page.getCurrent(), (int)page.getSize());
        List<ReceivableVo> list = baseMapper.selectReceivableList(receivableVo);
        PageInfo pageInfo = new PageInfo(list);
        page.setTotal(pageInfo.getTotal());
        page.setPages(pageInfo.getPages());
        fillBusinessLineName(list);
        return page.setRecords(list);
    }

结论:

3种分页方式

1. MybatisPlus自带

private void testPage(){
        QueryWrapper<JtnPost> queryWrapper = new QueryWrapper<JtnPost> ();
        JtnPost entity = new JtnPost();
        entity.setStatus(1);
        Page<JtnPost> pageQuery = new Page<JtnPost>(2,1);
        IPage<JtnPost> page=postManager.page(pageQuery, queryWrapper);
        log.info("page={}",ToStringBuilder.reflectionToString(page));
    }

    @Override
    public IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper) {
        return baseMapper.selectPage(page, queryWrapper);
    }

2.MybatisPlus自带,官网例子,自定义xml分页,麻烦的地方是 需要用 @param表示下

public interface UserMapper{//可以继承或者不继承BaseMapper
    /**
     * <p>
     * 查询 : 根据state状态查询用户列表,分页显示
     * 注意!!: 如果入参是有多个,需要加注解指定参数名才能在xml中取值
     * </p>
     *
     * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
     * @param state 状态
     * @return 分页对象
     */
    IPage<User> selectPageVo(Page page, @Param("state") Integer state);
}

3. 用PageHelper分页

结果集Page用 PageHelper或MybatisPlus的,看自己需求。

@Override
    public Page<ReceivableVo> getReceivablePage(Page page, ReceivableVo receivableVo) {
        log.debug("应收列表查询,ReceivableVo:{},Page:{}", receivableVo, page);
        PageHelper.startPage((int)page.getCurrent(), (int)page.getSize());
        List<ReceivableVo> list = baseMapper.selectReceivableList(receivableVo);
        PageInfo pageInfo = new PageInfo(list);
        page.setTotal(pageInfo.getTotal());
        page.setPages(pageInfo.getPages());
        fillBusinessLineName(list);
        return page.setRecords(list);
    }

猜你喜欢

转载自blog.csdn.net/FansUnion/article/details/89192879