JeecgBoot 低代碼開發平台,自己封裝了一套查詢過濾器,預設就支援模糊查詢,隻是需要前後加上 *,雖然麻煩,但是這樣是考慮到系統後期資料量大預設模糊查詢會導緻系統性能問題。當然如果你的系統資料量級别達不到這個情況,我們也提供了預設模糊查詢控件,不需要前後輸入 *
一、查詢過濾器用法
目錄索引:
- 功能描述
- 查詢規則全比對查詢模糊查詢範圍查詢包含查詢等等
- 查詢過濾器如何內建
- 更多查詢規則參考
查詢過濾器
1、功能描述
查詢過濾器可以幫助快速生成查詢條件,不需要編碼通過配置實作,支援模糊查詢、比對查詢、範圍查詢、不比對查詢等規則。
2、查詢規則
說明: 頁面查詢字段,需跟背景 Controller 中 Page 的字段對應一緻,背景不需寫代碼自動生成查詢條件 SQL; 預設查詢條件是全比對,想實作模糊查詢需求在查詢值的前後加: *;
查詢比對方式規則: [1]. 全比對查詢:查詢資料沒有特殊格式,預設為全比對查詢 [2]. 模糊查詢:查詢資料格式需加星号:{ * } 例如:
格式一: 張* (後模糊比對)
格式二: *張 (前模糊比對)
格式三: *張* (全模糊比對)
格式四: *張*三* (更進階比對)
[3]. 包含查詢:查詢資料格式采用逗号分隔:{ , }
例如:
格式: 張三,李四
(含義:In('張三','李四'))
[4]. 不比對查詢:查詢資料格式需要加歎号字首:{ ! }
例如:
格式: !張三
(含義:不等于'張三')
特殊說明:查詢不為Null的文法:!null(大小寫沒關系);
查詢不為空字元串的方法:!(隻有一個歎号);
[5]. 範圍查詢,支援數字,時間的範圍查詢,針對範圍查詢頁面會生成兩個查詢控件
1. 如果是單一比對方式,則頁面查詢控件的name, 跟實體字段命名一樣
2. 如果是範圍比對方式,則頁面查詢控件需要變成兩個分别名 {*}_begin,{*}_end
{*}_begin: 表示查詢範圍開始值
{*}_end: 表示查詢範圍結束值
舉例:
字段名稱 orderDate
查詢開始時間 : orderDate_begin
查詢結束時間 : orderDate_end
3、查詢過濾器如何內建
第一步:頁面實作查詢條件 線上清單的查詢區域,增加需要的查詢字段,如下圖所示。
效果:
第二步:controller 層處理 Controller 中對應的處理邏輯中追加如下代碼:
QueryWrapper<?> queryWrapper = QueryGenerator.initQueryWrapper(?, req.getParameterMap());
代碼示例:
@GetMapping(value = "/list")
public Result<IPage<JeecgDemo>> list(JeecgDemo jeecgDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JeecgDemo>> result = new Result<IPage<JeecgDemo>>();
//調用QueryGenerator的initQueryWrapper
QueryWrapper<JeecgDemo> queryWrapper = QueryGenerator.initQueryWrapper(jeecgDemo, req.getParameterMap());
Page<JeecgDemo> page = new Page<JeecgDemo>(pageNo, pageSize);
IPage<JeecgDemo> pageList = jeecgDemoService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
4、更多查詢規則參考
查詢模式 | 用法 | 說明 |
模糊查詢 | 支援左右模糊和全模糊 需要在查詢輸入框内前或後帶 * 或是前後全部帶 * | |
取非查詢 | 在查詢輸入框前面輸入!則查詢該字段不等于輸入值的資料 | (數值類型不支援此種查詢,可以将數值字段定義為字元串類型的) |
in 查詢 | 若傳入的資料帶,(逗号) 則表示該查詢為 in 查詢 | |
in 查詢 | 數字類型字段多值查詢,需要将字段加上字尾 “_MultiString”,其他規則同上 | 例如實體字段:tableType,頁面接受參數字段 tableType_MultiString |
多選字段模糊查詢 | 例如 現在 name 傳入值,a,b,c, 那麼結果 sql 就是 name like '% a%' or name like '% b%' or name like '% c%' | 上述 4 有一個特例,若某一查詢字段前後都帶逗号 則會将其視為走這種查詢方式,該查詢方式是将查詢條件以逗号分割再周遊數組 将每個元素作 like 查詢 用 or 拼接, |
- 進階值規則用法 (查詢内容,帶有查詢規則符号)
查詢模式 | 用法 | 舉例 |
< | 小于查詢。 查詢内容值規則:"lt+ 空格 + 内容" | 輸入值: “lt 100” |
<= | 小于等于查詢。 查詢内容值規則:"le+ 空格 + 内容" | 輸入值: “le 100” |
> | 大于查詢。 查詢内容值規則:"gt+ 空格 + 内容" | 輸入值: “gt 100” |
>= | 大于等于查詢。 查詢内容值規則:"ge+ 空格 + 内容" | 輸入值: “ge 100” |
- 範圍比對方式,則頁面查詢控件需要變成兩個分别名 {}_begin,{}_end {}_begin: 表示查詢範圍開始值 {}_end: 表示查詢範圍結束值
舉例:
字段名稱 costTime
查詢開始 : costTime_begin
查詢結束 : costTime_end
this.queryParam.costTime_begin = costTime_begin;
this.queryParam.costTime_end = costTime_end;
二、JInput 預設模糊查詢元件 —Vue2 版
特殊查詢元件,預設支援模糊查詢、大于等于查詢、小于等于查詢、不比對查詢。
1. 參數配置
參數 | 類型 | 必填 | 說明 |
placeholder | string | placeholder | |
trim | boolean | 是否自動去空格 預設 false | |
type | string | 查詢類型 ['like','ne','ge','le'] 分别是模糊,不等于,大于,小于,預設 like, 如果不想添加任何規則,請設定 type="", 即能走等于查詢(預設 like) |
2. 使用示例 改造使用者管理,賬号支援模糊查詢 2.1 元件導入
//省略其他代碼
import JInput from '@/components/jeecg/JInput'
export default {
name: "UserList",
mixins: [JeecgListMixin],
components: {
SysUserAgentModal,
UserModal,
PasswordModal,
JInput
},
//省略其他代碼
2.2 替換輸入框
<a-col :md="6" :sm="12">
<a-form-item label="賬号">
<!--<a-input placeholder="請輸入賬号查詢" v-model="queryParam.username"></a-input>-->
<j-input placeholder="請輸入賬号模糊查詢" v-model="queryParam.username"></j-input>
</a-form-item>
</a-col>
2.3 測試
三、JInput 預設模糊查詢元件 —Vue3 版
特殊查詢元件,支援模糊查詢、大于等于查詢、小于等于查詢、不比對查詢。
參數定義
參數 | 類型 | 必填 | 說明 |
placeholder | string | placeholder | |
trim | boolean | 是否自動去空格 預設 false | |
type | string | 查詢類型 ['like','ne','ge','le'] 分别是模糊,不等于,大于,小于,預設 like, 如果不想添加任何規則,請設定 type="", 即能走等于查詢(預設 like) | |
disabled | Boolean | 否 | 是否禁用,預設值 false |
效果展示
使用示例
改造使用者管理,賬号支援模糊查詢,配置 JInput 元件(user.data.ts 檔案中)
//省略其他代碼
{
label: '賬号',
field: 'username',
component: 'JInput',
colProps: {span: 6},
},
//省略其他代碼