Mybatis-Plus重写Page的奇技淫巧~
请开始我的表演~
技巧一、重载换名术!
就拿引言中的例子来说,我们需要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()方法,让他返回空。(不然返回两次数据不太友好)
- 写个有参构造方法调用父类的。
技巧二、偷天换日去密码术!
事情是这样的,当你获取用户信息的时候,肯定不能把密码返回到前端吧!那么用了重载换名术之后,该如何再对获取到的列表进行修改呢?
请看下文!
// 使用咱们自定义的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);