記錄一篇關於條件查詢語句的用法:1.通過QueryWrapper進行條件構造2.通過Example進行條件構造

風中有朵雨做的雲yi發表於2020-11-09

一. 前言
  在很多的業務場景中,除了簡單的增刪查改語句,我們還會有用到一些特殊的查詢,比如說條件查詢,模糊查詢等等,在java中構建條件語句的封裝類也有很多,其底層就是幫我們把sql語句給封裝好,方便我們進行呼叫.這裡我淺顯的記錄兩種構造條件語句的類,

  • 第一種:QueryWrapper
    舉個例子:查詢課程資訊,帶分頁顯示
    它的使用方式如下:
 //建立一個page物件
        Page<EduCourse> pageCourse = new Page<>(current,limit);
        //構建條件
        QueryWrapper<EduCourse> courseWrapper = new QueryWrapper<>();
        //多條件組合查詢
        String title = courseQuery.getTitle();
        String status = courseQuery.getStatus();
        //判斷條件值是夠為空,如果不為空,拼接條件
        if (!StringUtils.isEmpty(title)){
            courseWrapper.like("title",title);
        }
        if (!StringUtils.isEmpty(status)){
            courseWrapper.eq("status",status);
        }
        courseService.page(pageCourse,courseWrapper);
        long total = pageCourse.getTotal();//總記錄數
        List<EduCourse> records = pageCourse.getRecords();
        return R.ok().data("total",total).data("rows",records);
    }

程式碼解釋:
首先我們用了一個Page物件用來分頁,這個暫且不管,下面的QueryWrapper才是重點,通過例項化一個QueryWrapper物件,然後通過其方法like,或者eq進行模糊查詢和等值查詢,這裡一般會使用StringUtils工具類進行一個值的判斷
關於QueryWrapper的用法還有很多,如下圖:

在這裡插入圖片描述

  • 第二種:通過new一個Example物件進行方法的實現,從而達到模糊查詢的目的.首先要注意的是這個Example物件是tk包下的

在這裡插入圖片描述匯入其他的包會導致方法使用不了,我們來看看具體的使用案例

 @Override
    public List<Brand> findList(Brand brand) {
        //自定義條件搜尋物件
        Example example = new Example(Brand.class);
        //條件構造器
        Example.Criteria criteria = example.createCriteria();
        //brand.name != null or brand.letter != null
        if (!StringUtils.isEmpty(brand.getName())){
            /**
             * 1.Brand的屬性名
             * 2.佔位引數,搜尋的條件
             */
            criteria.andLike("name","%"+brand.getName()+"%");
        }
        if (!StringUtils.isEmpty(brand.getLetter())){
            criteria.andEqualTo("letter",brand.getLetter());
        }

        List<Brand> brandList = brandMapper.selectByExample(example);
        return brandList;
    }

在這裡我們通過name,和Letter進行一個簡單的模糊查詢,首先都需要進行條件構造,這裡與QueryWrapper不一樣,注意看Example.Criteria criteria = example.createCriteria();
兩者實現的功能是一樣的.
來看看Example提供的方法:
在這裡插入圖片描述條件帶分頁實現:

public Example createExample(Brand brand){
        //自定義條件搜尋物件
        Example example = new Example(Brand.class);
        //條件構造器
        Example.Criteria criteria = example.createCriteria();
        //brand.name != null or brand.letter != null
        if (!StringUtils.isEmpty(brand.getName())){
            /**
             * 1.Brand的屬性名
             * 2.佔位引數,搜尋的條件
             */
            criteria.andLike("name","%"+brand.getName()+"%");
        }
        if (!StringUtils.isEmpty(brand.getLetter())){
            criteria.andEqualTo("letter",brand.getLetter());
        }
        return example;
    }
 @Override
    public PageInfo<Brand> findPage(Brand brand,Integer page, Integer size) {
        //分頁
        PageHelper.startPage(page,size);
        //搜尋資料 name,letter
        Example example = createExample(brand);
        List<Brand> brandList = brandMapper.selectByExample(example);
        //封裝
        PageInfo<Brand> pageInfo = new PageInfo<>(brandList);
        return pageInfo;
    }
  /**
     * 分頁查詢實現
     */
    @PostMapping("/search/{page}/{size}")
    public Result<PageInfo<Brand>> findBrandAndPage(
            @RequestBody Brand brand,
            @PathVariable("page") Integer page,
            @PathVariable("size") Integer size){
        //呼叫
        PageInfo<Brand> pageInfo = brandService.findPage(brand,page,size);
        Result<PageInfo<Brand>> result = new Result<>(true, StatusCode.OK, "條件帶分頁查詢成功", pageInfo);
        return result;
    }

相關文章