【學而無止盡】MyBatis-Plus學習筆記03-條件包裝器

上次我們學習瞭如何使用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);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章