自定义查询
概述
自定义查询是应用于特殊业务页面的一种高级查询功能,用户可自行配置多个数据的查询条件,定制符合自己的复杂查询条件。 自定义查询支持单表、多表、多字段、多条件组合查询,支持以下查询条件:
| 查询条件 | 符号 | 参数 | 说明 |
|---|---|---|---|
| 模糊查询 | ⊇ | like | 所查询信息包含输入关键词,是最为常见的搜索方式,适合尝试性搜索以及精确搜索 |
| 精确查询 | = | eq | 输入关键词需要与被查询信息完全一致,适合有很明确内容的查询,如姓名 |
| 精确查询多个 | ∧ | in | 同时满足多个关键词的信息 |
| 不等于 | ≠ | ne | 排除与输入关键词完全一致的信息 |
| 大于 | > | gt | 查询信息大于输入关键词,一般用于数字的查询 |
| 大于等于 | ≥ | ge | 查询信息大于或等于输入关键词,一般用于数字的查询 |
| 小于 | < | lt | 查询信息小于输入关键词,一般用于数字的查询 |
| 小于等于 | ≤ | le | 查询信息小于或等于输入关键词,一般用于数字的查询 |
| 左模糊查询 | → | leftlike | 以关键词为线索罗列出查询信息,从左起检查数据字段包含关键字的数量,数量多的就排在前面。 |
| 右模糊查询 | ← | rightlike | 以关键词为线索罗列出查询信息,从右起检查数据字段包含关键字的数量,数量多的就排在前面。 |
| 模糊不等于 | ⊉ | notlike | 所查询信息中,只要含有输入关键词的,都不作为搜索结果 |
| 范围查询 | ~ | between | 时间外的范围查询 |
条件查询除了上述灵活查询条件拼装外,还增加了排序,字段传递格式如下:
| 排序类别 | 符号 | 参数 | 说明 |
|---|---|---|---|
| 升序 | ↑ | asc | 返回升序查询结果 |
| 降序 | ↓ | desc | 返回降序查询结果 |
快速上手
调用接口确认
假设某页面自定义查询的接口url为/system/group/criteriaList ,可以看到前端使用了criteriaList关键字来区分自定义查询,因此后端对应方法名为criteriaList。
传参
| 字段 | 说明 |
|---|---|
| field | 实体属性名(小驼峰格式) |
| operation | 查询类型,支持模糊查询(like)、精确查询(eq)、精确查询多个(in)、不等于(ne)、左模糊查询(leftlike)、右模糊查询(rightlike)、模糊不等于(notlike)、大于(gt)、小于(lt)、大于等于(ge)、小于等于(le)、范围查询(between)、顺序(asc)、倒序(desc) |
| valueData | 查询值,排序时为空即可(asc或者desc) |
示例:
java
[ {
"field": "groName",
"operation": "like",
"valueData": "test"
},{
"field": "groName",
"operation": "asc",
"valueData": ""
} ]后端方法
controller层方法如下示例
java
import com.hisense.pangea.mybatis.entity.ConditionVO;
import com.hisense.pangea.mybatis.utils.SearchUtil;
//常规查询,不支持时间类型的查询
@PostMapping("criteriaList")
@Paginate
public List<SysGroup> customList(@RequestBody List<ConditionVO> conditionList) {
QueryWrapper<SysGroup> queryWrapper = (QueryWrapper<SysGroup>) SearchUtil.parseWhereSql(conditionList);
return sysGroupService.selectList(queryWrapper);
}java
import com.hisense.pangea.mybatis.entity.ConditionVO;
import com.hisense.pangea.mybatis.utils.SearchUtil;
//加强之后的高级查询,支持时间类型查询
@PostMapping("criteriaList")
@Paginate
public List<SysGroup> customList(@RequestBody List<ConditionVO> conditionList) {
QueryWrapper<SysGroup> queryWrapper = (QueryWrapper<SysGroup>) SearchUtil.parseWhereSqlEnhance(conditionList,new SysGroup);
return sysGroupService.selectList(queryWrapper);
}注意事项
- 如果在业务
service没有继承com.hisense.pangea.core.BaseService,而是在xxxMpper.xml中自定义的查询sql,拼接查询条件时请参考如下示例:java<select id="selectGroupMainList" resultMap="SysGroupResult"> select g.ID, g.GRO_CODE, g.GRO_NAME, g.DESCRIPTION, g.SYS_CODE, g.CREATE_BY, g.CREATE_TIME,g.UPDATE_BY,g.UPDATE_TIME from SYS_GROUP g <if test="ew.sqlSegment != null and ew.sqlSegment != ''"> ${ew.customSqlSegment} </if> </select> - 单表查询可使用
BaseMapper中的selectList(queryWrapper)多表查询需要设置表别名,例如:queryWrapper.eq("g.gro_code", sysGroup.getGroCode()); - 多表分页查询需要先查询主表,再查询子表,故暂时不支持同时查询主子表字段