請開始我的表演~
技巧一、重載換名術!
就拿引言中的例子來說,我們需要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);