# 查询管理
# 概述
查询管理功能提供了一个查询配置页面,用户在页面中配置需要的查询结果和查询条件后,系统将根据配置自动生成SQL,并通过统一接口执行SQL,返回查询结果。
此功能用于实现页面动态建模中各种查询需求,如分页查询列表页、下拉框、穿梭树。同时也可以作为打印管理功能的数据来源。
【菜单路径:】系统配置化平台 -> 元数据 -> 元数据管理 -> 点击一个应用 -> 页面建模 ->查询管理
# 查询
可根据查询管理名称、编码、分类查询。查询结果按排序号正序排序,创建时间倒序,id倒序排序。

# 新增
点击表格上方新增按钮,将弹出新增查询管理弹窗,填写查询管理的基本信息后,点击下一步。根据配置类型的选择,将跳转到不同的弹窗页面,分别是脚本片段和配置查询。

| 字段名 | 字段说明 |
|---|---|
| 编码 | 必填,全局唯一,最大长度为75,只允许字母、数字以及下划线 |
| 名称 | 必填, 最大长度为37 |
| 分类 | 必填,打印设计:只有打印管理功能可以使用 页面建模:只有页面建模功能可以使用 |
| 配置类型 | 必填,配置查询/脚本片段。详细介绍见下方描述 |
| 排序 | 排序号 |
| 备注 | 备注,最大长度为500个字符 |
# 配置查询
用户无需编写查询SQL,只需在页面进行相关配置,后台将根据配置自动组装SQL,查询出用户想要的数据。配置查询包括以下几个部分:实体、查询字段配置、条件配置、 关联关系配置、排序配置、分组配置、预览SQL、查询结果扩展。
# 实体
实体部分用于选择查询SQL中所有的表,其他部分只能选择此处配置的表中的字段。点击上方新增实体按钮,弹出选择实体弹窗,弹窗中显示了当前系统中配置的所有元数据,可根据所属模块等条件筛选。
提示
新增实体的弹窗只显示已同步的元数据实体。

选择需要的表后,点击保存,所选表将回显到实体列表中,给每个实体填写别名,并选择一个主表。

# 查询字段配置
查询字段用于配置SQL中SELECT的部分。点击表格上方新增字段按钮,即可添加一行空白数据。各属性含义见下表:

| 字段名 | 字段说明 |
|---|---|
| 类型 | 必填,表字段:查询的字段来自所选的实体表 计算字段:包含函数的字段 |
| 所属表 | 类型为表字段时必填,选择字段的所属表 |
| 字段名称 | 必填,表字段:选择所属表中的一个字段 计算字段:直接填写字段名称 |
| 字段表编码 | 必填,表字段:显示字段的表编码,不可修改 计算字段:填写字段编码,如count(id) |
| 别名 | 必填,填写字段的别名 |
# 条件配置
条件配置用于填写SQL中WHERE后的条件语句。点击表格上方新增字段按钮,即可添加一行空白数据。各属性含义见下表:

| 字段名 | 字段说明 |
|---|---|
| 逻辑符 | 两个条件间的连接符,选择AND/OR |
| 左括号 | 条件前可能有的左括号,允许填写多个 |
| 类型 | 除数据权限外必填,表字段:查询的字段来自所选的实体表 计算字段:包含函数的字段 |
| 所属表 | 类型为表字段时必填,选择字段的所属表 |
| 字段名称 | 除数据权限外必填,表字段:选择所属表中的一个字段 计算字段:直接填写字段名称 |
| 字段表编码 | 除数据权限外必填,表字段:显示字段的表编码,不可修改 计算字段:填写字段编码,如count(id) |
| 操作符 | 除数据权限外必填,字段和值之间的操作符,选择下拉选项中的一个 |
| 值类型 | 必填,详细介绍见值类型和值 |
| 值 | 必填,填写操作符右边的值,详细介绍见值类型和值 |
| 空值规则 | 必填,详细介绍见空值规则 |
| 右括号 | 条件后可能有的右括号,允许填写多个 |
# 值类型和值
不同值类型允许填写的值内容不同,具体如下:
- 参数:指值是动态参数,值填写的是占位符,例如填写为
name,则后台会自动标识为#{params.name}。在系统执行sql时,占位符会被替换为传入的动态参数name - 常量:指值是一个常量,例如查询条件是
tp.is_deleted = 1。则值应当填写1。 - 系统参数:指系统可以自动读取的动态参数,执行SQL时不需要用户传入,比如当前登录号的ID。下拉选项中列出了可选项。
- 其他表字段:指关联其他表的字段。例如查询条件是
tp.id = tpu.person_id,则值应当填写tpu.person_id - 数据权限:若查询需要用到数据权限,则需要在此添加数据权限占位符。和基础平台中的数据权限功能配合使用
# 空值规则
配置处理入参为NULL或者空字符串时的处理方式
- 空值不返回数据:若入参为NULL或者空字符串时,此条件固定返回false。实现方式为将条件替换为
1 = 2 - 空值返回所有数据:若入参为NULL或者空字符串时,此条件固定返回true。实现方式为将条件替换为
1 = 1
# 快速新增
若已有SQL语句,可使用快速新增功能快速添加条件配置。点击快速新增按钮,在弹窗中填入和示例格式一致的SQL语句,点击保存。 系统将对SQL进行解析,并将解析出的配置填写到条件配置列表中。同时,在弹窗中点击右键,可快速添加系统参数占位符。
提示
快速新增时,填写的SQL语句中的表编码、别名、字段名都必须是实体列表中包含的数据,否则将解析失败。

# 数据权限占位
点击数据权限占位按钮,可快速添加一条数据权限数据。

# 关联关系配置
关联关系配置用于填写SQL中主表和子表的关联关系。点击表格上方新增子表按钮,即可添加一行空白数据:

点击数据右侧操作列中的加号,可给当前子表添加一条关联关系数据:

| 字段名 | 字段说明 |
|---|---|
| 子表 | 必填,选择一个子表 |
| 关联关系 | 必填,选择当前子表和主表的关联关系 |
| 逻辑符 | 两个条件间的连接符,选择AND/OR |
| 左括号 | 条件前可能有的左括号,允许填写多个 |
| 字段名称 | 必填,选择当前子表中的一个字段 |
| 字段表编码 | 自动显示字段名称中选中的字段的编码 |
| 操作符 | 必填,字段和值之间的操作符,选择下拉选项中的一个 |
| 值类型 | 必填,详细介绍见值类型和值 |
| 值 | 必填,填写操作符右边的值,详细介绍见值类型和值 |
| 空值规则 | 必填,详细介绍见空值规则 |
| 右括号 | 条件后可能有的右括号,允许填写多个 |
# 排序配置
排序配置用于配置SQL语句中ORDER BY后的语句,决定查询结果的排序规则。点击表格上方新增按钮可新增一条空数据。

| 字段名 | 字段说明 |
|---|---|
| 表名称 | 必填,选择一个表 |
| 字段名称 | 必填,选择选中的表中的一个字段 |
| 字段表编码 | 自动显示字段名称中选中的字段的编码 |
| 排序类型 | 必填,升序/降序 |
# 分组配置
# 分组字段
用于配置SQL语句中GROUP BY后的语句。点击表格上方新增按钮可新增一条空数据。

| 字段名 | 字段说明 |
|---|---|
| 所属表 | 必填,选择一个表 |
| 字段名称 | 必填,选择当前表中的一个字段 |
| 字段表编码 | 自动显示字段名称中选中的字段的编码 |
# 限定条件
用于配置SQL语句中HAVING后的语句。点击表格上方新增按钮可新增一条空数据。

| 字段名 | 字段说明 |
|---|---|
| 逻辑符 | 两个条件间的连接符,选择AND/OR |
| 左括号 | 条件前可能有的左括号,允许填写多个 |
| 类型 | 除数据权限外必填,表字段:查询的字段来自所选的实体表 计算字段:包含函数的字段 |
| 所属表 | 类型为表字段时必填,选择字段的所属表 |
| 字段名称 | 除数据权限外必填,表字段:选择所属表中的一个字段 计算字段:直接填写字段名称 |
| 字段表编码 | 除数据权限外必填,表字段:显示字段的表编码,不可修改 计算字段:填写字段编码,如count(id) |
| 操作符 | 除数据权限外必填,字段和值之间的操作符,选择下拉选项中的一个 |
| 值类型 | 必填,详细介绍见值类型和值 |
| 值 | 必填,填写操作符右边的值,详细介绍见值类型和值 |
| 空值规则 | 必填,详细介绍见空值规则 |
| 右括号 | 条件后可能有的右括号,允许填写多个 |
# 预览SQL
在所有内容配置完成后,可点击预览SQL按钮,查看系统根据配置生成的SQL。

# 查询结果扩展
若配置的SQL语句查询出的结果,无法满足需求,还可以在查询结果扩展中填写JS代码,对查询结果做进一步处理。
提示
必须打开是否开启扩展开关,扩展处理才能生效。

JS代码示例:
//方法名固定为extend,入参records为执行sql后的返回结果,类型为List<Map<String,Object>>
function extend(records) {
var iterator = records.iterator();
while (iterator.hasNext()) {
var elementMap = iterator.next();
elementMap.put('name', '张三');
}
return records;
}
# 脚本片段
脚本片段允许用户直接填写SQL语句。需要配置的内容包括:实体、脚本配置、查询字段配置、 条件配置、查询结果扩展。
# 脚本片段-实体
和配置查询中的实体配置方式一致。详情见配置查询-实体
# 脚本片段-脚本配置
在脚本配置TAB页签中填写查询SQL:

# 脚本片段-查询字段配置
将SQL中查询的字段配置在此TAB页签中。配置内容和配置查询中一致,详情见配置查询-查询字段配置
# 脚本片段-条件配置
将SQL条件中,值类型为参数的条件配置在此TAB页签中即可。
例如,上图SQL中包含的条件为page_id = ${params.pageId},则条件配置中应当添加下图所示的数据,编码填写pageId,名称填写所属页面id。

# 脚本片段-无实体(不选择实体)
# 脚本片段-脚本配置
在脚本配置TAB页签中填写查询SQL:

# 脚本片段-查询字段配置
将SQL中查询的字段配置在此TAB页签中,类型选择表字段,名称可以自定义,别名与SQL中保持一致。

# 脚本片段-条件配置
将SQL条件中,值类型为参数的条件配置在此TAB页签中即可。
例如,上图SQL中包含的条件为page_id = ${params.pageId},则条件配置中应当添加下图所示的数据,编码填写pageId,名称填写所属页面id。

# 脚本片段-查询结果扩展
配置方式和配置查询中一致,详情见配置查询-查询结果扩展
# 复制新增
若用户需要新增的数据和旧数据相差不大,可使用复制新增功能。点击需要复制的数据右侧复制新增按钮,输入新的编码名称及其他内容,点击保存,即可复制成功。

# 编辑
点击数据右侧编辑按钮,弹出修改弹窗,修改信息后点击保存即可。

# 删除
- 单个删除:点击需要删除的数据右侧的删除按钮
- 批量删除:勾选需要删除的数据,点击表格上方的删除按钮

# 查询管理执行接口
查询配置完成后,可调用以下接口执行SQL,获取查询结果:
- url
- POST http://{host}:{port}/api/metadata/query-manage/executeSql
- 入参格式
{
"id": "26d8c28a1329cc22fbd49dbd70bb9a2d", //查询管理id
"paramMap": { //查询SQL需要的入参放到此Map中
"pageId": "8ea79f7e250912b61fa76e0f05f7d946"
},
"queryPageInfo": { //分页信息
"enable": false, //是否需要分页
"current": 1, //当前页码
"size": 10 //每页记录数
}
}
- 出参格式
{
"code": "200",
"msg": "操作成功",
"data": {
"records": [ //返回数据
{
"code": "dhyw",
"address": "",
"id": "67b40a69c00d112346b45cd2d99f142d"
}
],
"total": 0, //分页相关信息,若入参选择不分页,忽略这些信息即可
"size": 10,
"current": 1,
"pages": 0
},
"success": true
}