自定义查询
概述
自定义查询是应用于特殊业务页面的一种高级查询功能,用户可自行配置多个数据的查询条件,定制符合自己的复杂查询条件。 自定义查询支持单表、多表、多字段、多条件组合查询,支持以下查询条件:
查询条件 | 符号 | 参数 | 说明 |
---|---|---|---|
模糊查询 | ⊇ | 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());
- 多表分页查询需要先查询主表,再查询子表,故暂时不支持同时查询主子表字段