上次我們學習瞭如何使用Mybatis-plus插件如何對數據進行分頁展示,重複的代碼這裏不貼了。今天我們學習如何通過插件提供的"條件包裝器"實現數據的條件查詢及篩選等。
// 還是通過上一個示例,發送/user/findPage?pageNum=1&pageSzie=10獲取分頁的數據
// 我們這次不僅要分頁的數據 還要條件滿足的數據。
// IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
// 插件提供的selectPage方法接收兩個參數
// 第一個參數是用於構建分頁條件的對象:
// com.baomidou.mybatisplus.extension.plugins.pagination.Page
// 第二個參數是用於構建條件查詢的條件包裝器
// com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
// 該類是一個包裝器的抽象類
// QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父類
public abstract class AbstractWrapper<T> implements ISqlSegment {
public AbstractWrapper() {
}
// 裏面定義了許多的方法實現 官網說明:
//用於生成 sql 的 where 條件, entity 屬性也用於生成 sql 的 where 條件
//注意: entity 生成的 where 條件與 使用各個 api 生成的 where 條件沒有任何關聯行爲
// 說多無益 我們用示例試一下吧
// 需求:根據name進行查詢並分頁
@PostMapping("findPage")
public IPage<Employee> findPage(Employee employee, Integer pageNum, Integer pageSize) {
// 構建查詢的包裝器對象
QueryWrapper qw = new QueryWrapper();
// eq(R column, Object val) 第一個參數是數據庫字段名 第二個參數是字段值
// 效果:eq("name","李白") => WHERE name = "李白"
qw.eq("name", employee.getName());
return employeeMapper.selectPage(new Page(pageNum, pageSize), qw);
}
// 需求:根據name及address進行查詢並分頁
@PostMapping("findPage")
public IPage<Employee> findPage(Employee employee, Integer pageNum, Integer pageSize) {
// 構建查詢的包裝器對象
QueryWrapper qw = new QueryWrapper();
Map searchMap = new HashMap();
/**
* allEq(Map<R, V> params) 組合條件查詢
* allEq(Map<R, V> params, boolean null2IsNull) 組合條件查詢 如果null2IsNull爲true value = null的值會以ISNULL查詢 否則忽略
*/
// 構建查詢條件
searchMap.put("name", employee.getName());
searchMap.put("address", employee.getAddress());
qw.allEq(searchMap, false);
// WHERE name = '李白' AND address = '長白山'
return employeeMapper.selectPage(new Page(pageNum, pageSize), qw);
}
// 需求:根據name及address進行查詢並分頁
@PostMapping("findPage")
public IPage<Employee> findPage(Employee employee, Integer pageNum, Integer pageSize) {
// 構建查詢的包裝器對象
// 如果查詢條件正好對應bean的字段 則可以直接傳入 也可以達到同上的效果 非常方便
QueryWrapper qw = new QueryWrapper(employee);
return employeeMapper.selectPage(new Page(pageNum, pageSize), qw);
}
// 需求:根據name及address進行查詢並分頁
@PostMapping("findPage")
public IPage<Employee> findPage(Employee employee, Integer pageNum, Integer pageSize) {
// 構建查詢的包裝器對象
QueryWrapper qw = new QueryWrapper();
// ne(column,val) --> 不等於 <> 效果: name <> 杜甫
qw.ne("name",employee.getName());
// gt(column,val) --> 大於 > 效果: id > 1
qw.gt("id",employee.getId());
// ge(column,val) --> 大於等於 >= 效果 : age >= 18
qw.ge("age",employee.getAge());
// ....還有很多的API都可以在官網上找到 如 like notLike between isNull
return employeeMapper.selectPage(new Page(pageNum, pageSize), qw);
}