Mybatis-Plus重写Page的奇技淫巧~

最近做视频练习的时候,因为前段需要的列表形式是rows:[xxx],而Mybatis-Plus的IPage对象默认返回的是records。

我们该如何做才能让他返回前端需要的列表形式呢?又该如何对这个列表进行修改呢?

文章目录

  • 请开始我的表演~
    • 技巧一、重载换名术!
    • 技巧二、偷天换日去密码术!

请开始我的表演~

技巧一、重载换名术!

就拿引言中的例子来说,我们需要IPage对象可以把data列表存储在rows中。

我们要做的操作很简单,自己写一个Page类,然后继承默认的Page类,并重写它的方法!

import java.util.List;

public class Page<T> extends com.baomidou.mybatisplus.extension.plugins.pagination.Page {

    public List<T> getRows() {
        return super.getRecords();
    }

    public List<T> getRecords() {
        return null;
    }

    public Page(long current, long size) {
        super(current, size);
    }

}

你没有看错,就是这么简单几步!

  • 新增getRows()方法,返回父类的getRecords()的结果。
  • 重写getRecords()方法,让他返回空。(不然返回两次数据不太友好)
  • 写个有参构造方法调用父类的。
    Mybatis-Plus重写Page的奇技淫巧~_第1张图片

技巧二、偷天换日去密码术!

事情是这样的,当你获取用户信息的时候,肯定不能把密码返回到前端吧!那么用了重载换名术之后,该如何再对获取到的列表进行修改呢?

请看下文!

// 使用咱们自定义的Page接收!
Page<Staff> data = baseMapper.selectPage(new Page<Staff>(page, size), query);
List<Staff> staffList = new ArrayList<>();
// 使用getRows()接收列表(用getRecords()是空的,因为重写了。)
for (Staff s: data.getRows()) {
	// 遍历设密码为空,并加入新的列表。
    s.setPassword(null);
    staffList.add(s);
}
// set的时候要用setRecords()!因为你没有setRows()方法,
// 而且就算去写一个,也会感觉困难重重,难道还要单独写个rows对象吗?
// 可是这样的话,getRows()又该返回什么呢?
// 所以这里直接取巧赋值给自带的records,然后最终getRows()的时候,
// 就会调用父类的getRecords(),获取到咱们改过的值!!!
data.setRecords(staffList);
// 返回的时候,强转成IPage类型。
return Result.ok((IPage<Staff>)data);

Mybatis-Plus重写Page的奇技淫巧~_第2张图片

你可能感兴趣的:(SpringBoot学习,java,mybatis,经验分享,intellij,idea,列表)