記錄一篇關於條件查詢語句的用法:1.通過QueryWrapper進行條件構造2.通過Example進行條件構造
一. 前言
在很多的業務場景中,除了簡單的增刪查改語句,我們還會有用到一些特殊的查詢,比如說條件查詢,模糊查詢等等,在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;
}
相關文章
- Mybatis-Plus - 條件構造器 QueryWrapper 的使用MyBatisAPP
- 寫一個“特殊”的查詢構造器 – (四、條件查詢:複雜條件)
- Go語言ORM包:使用worm構造查詢條件GoWorm
- MyBatis-plus 自動生成 條件構造器 QueryWrapperMyBatisAPP
- mybatis-plus QueryWrapper條件查詢器MyBatisAPP
- 條件語句
- 通過新增條件優化SQL優化SQL
- java-queryWrapper條件JavaAPP
- 深入理解mongodb查詢條件語句MongoDB
- javaScript條件語句JavaScript
- GO 條件語句Go
- MyBatis-Plus條件構造器:構建安全、高效的資料庫查詢MyBatis資料庫
- Go 條件語句 - Go 學習記錄Go
- mongodb條件查詢不等於MongoDB
- SpringBoot整合Jpa對資料進行排序、分頁、條件查詢和過濾Spring Boot排序
- mysql條件查詢MySql
- MongoDB查詢條件MongoDB
- Mysql儲存過程 變數,條件,迴圈語句用法MySql儲存過程變數
- 34. 過濾條件、多表查詢、子查詢
- MySQL全面瓦解7:查詢的過濾條件MySql
- Go:條件控制語句Go
- 04.條件語句
- Python if else條件語句Python
- oracle中的條件語句Oracle
- hyperf關聯模型條件查詢模型
- Laravel 多條件查詢Laravel
- gorm 使用map實現in 條件查詢用法GoORM
- PL/SQL 條件控制語句SQL
- Swift 條件語句講解Swift
- python-條件控制(if語句)Python
- 條件判斷語句 if case
- 學習Rust 條件語句Rust
- mysql多條件過濾查詢之mysq高階查詢MySql
- Rust 在 cargo 中進行條件編譯RustCargo編譯
- 使用Excel資料進行條件刪除Excel
- 【小知識】QueryWrapper迴圈or條件APP
- Stream中filter過濾條件問題記錄Filter
- 條件過濾檢索