查询过滤
百度已收录

一、查询模式

 

平台默认支持AND方式组合查询,即a=1 AND b>2 AND c<3 这种组合查询模式。

 

二、查询规则

 

平台目前支持精确匹配、模糊匹配、数值比较、范围查询等多种查询规则。

 

1、精确匹配

查询数据没有特殊格式,默认为精确匹配查询。

举例:

比如按职务编码精确查询,vue写法如下:

<a-form-item label="职位编码">
  <a-input placeholder="请输入职位编码" v-model="queryParam.positionCode"></a-input>
</a-form-item>

2、模糊匹配

模糊匹配分3种情况,分别是左模糊、右模糊、全模糊,规则为在查询字段名称后加$llk或$rlk或$lk。

  格式一: *张    (左模糊匹配,对应标识$llk)

  格式二: 张*    (右模糊匹配,对应标识$rlk)

  格式三: *张*   (全模糊匹配,对应标识$lk)  

举例:

比如按照职务名称模块查询,vue写法如下:

<a-form-item label="职位名称">
  <a-input placeholder="请输入职位名称" v-model="queryParam.positionName$lk"></a-input>
</a-form-item>

注意:v-model的值后面跟$lk标识,代表按照该字段全模糊查询。

3、数值比较

数值比较查询常见于数字字段,在页面查询控件需要变成“字段+$规则标识”这种格式,其中比较规则有:

大于,{*}$gt,

大于等于,{*}$ge,

小于,{*}$lt,

小于等于,{*}$le,

举例:

比如查询出差天数大于某一数的记录,vue的写法如下:

<a-form-item label="出差天数">
            <a-input-number
                placeholder="请输入出差天数"
                v-model="queryParam.day$gt"
                style="width: 100%"
                :min="0"
                :max="999999999"
                :step="1"
                :allowClear="true"
              />

</a-form-item>

注意:v-model的值后面跟$gt标识

 

4、范围查询

如果是范围查询,则页面查询控件需要变成两个分别名 {*}$ge,{*}$le

{*}$ge: 表示查询范围大于等于

{*}$le:   表示查询范围小于等于

举例:

比如按照创建日期查询一段时间范围内的数据,vue的实现如下,首先在v-model中绑定一个查询属性字段createTimeRange,该字段是页面中的临时字段,不需要跟后台业务对象对应,当执行onDateChange事件时把该字段分解成两个字段赋给查询对象,一个是范围开始字段createTime$ge,一个是范围结束字段createTime$le,字段createTime是需要跟后台数据库字段有对应关系的,否则查询SQL出错。

<a-form-item label="创建时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
  <a-range-picker
    style="width: 210px"
    v-model="queryParam.createTimeRange"
    format="YYYY-MM-DD"
    :placeholder="['开始时间', '结束时间']"
    @change="onDateChange"
    @ok="onDateOk"
  />
</a-form-item>

onDateChange: function(value, dateString) {
  this.queryParam.createTime$ge = dateString[0]
  this.queryParam.createTime$le = dateString[1]
}

平台目前支持的查询规则如下:

规则

标识

举例

大于

gt

字段名$gt

大于等于

ge

字段名$ge

小于

lt

字段名$lt

小于等于

le

字段名$le

等于

eq

字段名

不等于

ne

字段名$ne

包含

in

字段名$in

全模糊

lk

字段名$lk

左模糊

llk

字段名$llk

右模糊

rlk

字段名$rlk

 

三、前端代码如何实现

 

在vue列表页面的查询区域,增加要查询的字段即可,比如:

<!-- 查询区域 -->
<div class="table-page-search-wrapper">
  <a-form layout="inline" @keyup.enter.native="searchQuery">
    <a-row :gutter="24">

      <a-col :md="6" :sm="8">
        <a-form-item label="职位名称">
          <a-input placeholder="请输入职位名称" v-model="queryParam.positionName$lk"></a-input>
        </a-form-item>
      </a-col>
      <a-col :md="6" :sm="8">
        <a-form-item label="职位编码">
          <a-input placeholder="请输入职位编码" v-model="queryParam.positionCode"></a-input>
        </a-form-item>
      </a-col>
      <a-col :md="6" :sm="8">
        <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
          <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
          <a-button type="default" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
          <a @click="handleToggleSearch" style="margin-left: 8px">
            {{ toggleSearchStatus ? '收起' : '展开' }}
            <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
          </a>
        </span>
      </a-col>

    </a-row>
  </a-form>
</div>

界面效果:

四、后端代码如何实现

云程平台对后端代码进行封装,业务上只需要实现Controller层的方法即可。

@GetMapping(value = "/list")
@AutoLog(value = "职务管理-分页查询")
public HttpResult<?> queryPageList(SysPosition sysPosition,
                                       @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                       @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                       HttpServletRequest req) {
   QueryWrapper<SysPosition> queryWrapper = QueryBuilder.initQueryWrapper(sysPosition, req.getParameterMap());
   Page<SysPosition> page = new Page<SysPosition>(pageNo, pageSize);
   IPage<SysPosition> list = sysPositionService.page(page, queryWrapper);
   return HttpResult.ok(list);
}

实现查询过滤重点语句是:

   QueryWrapper<SysPosition> queryWrapper = QueryBuilder.initQueryWrapper(sysPosition, req.getParameterMap());

在该语句中,实现对查询规则的解析,并封装成后台mybatis-plus可以解析的SQL语句。