查询是数据源和 UI 之间的桥梁。您可以在编辑应用时或者在查询库中创建查询。本文档将介绍如何创建和使用查询。
步骤 1:连接数据源
在查询编辑器中选择新建查询,第一步是要连接已有的数据源或新建数据源,所连接的数据源不同,那么查询编辑器面板展示的也不同,与数据进行交互的方式也会有所不同。
下面分别选择连接 MySQL 数据源、REST API 数据源,其查询面板展示如下:
步骤 2:编写查询语句
第二步是编写查询语句。下图以 MySQL 数据源编写 SQL 为例,当您编写完成查询语句后,下方会出现实时预览框,预览框会对查询语句 {{ }}
中所写的 JS 表达式进行运算,因此您可以通过其对查询内容的正确性进行快速检查。
元数据
对于 MySQL、PostgreSQL、MongoDB 等数据源来说,点击查询列表下方的元数据,结果会以树形结构展示当前数据库中的表以及表的字段信息。因此对于需要编写上述数据源的查询语句的时候,元数据会起到很好的提示作用:
除此之外,输入查询语句时,码匠也能根据元数据触发自动补全 (autosuggestion) 功能,因此您可以更快更准确地输入想要的内容。例如:输入字段的前几个字母时,下方会弹出一个菜单供您选择想要输入的字段,如下图:
步骤 3:运行查询和通知
编写完查询语句之后,即可运行查询。查询运行的执行方式可选的有两种:输入变化时自动执行和手动触发执行。
💡 说明
系统默认读请求(查数据)为输入变化时自动执行,写请求(增/删/改数据)为手动触发执行。如果识别到了写请求,系统会自动切换为手动触发执行。当然,您也可以自己选择其执行方式。
输入变化时自动执行
读请求的查询将在输入更改时自动刷新。输入指的是当前查询所依赖对象的值,值可来自组件,也可来自查询结果。例如:select * from orders where user_id={{table1.selectedRow.id}}
,当表 table1
的选中行变化时,查询结果随之自动变化;select * from users where customer_id = {{input.value}}
将在每次 input.value
被更改时自动更新查询结果。
手动触发执行
与自动执行相对,手动触发需要用户主动通过点击某个按钮、链接或者类似行为,查询才会运行。 对于写请求(增/删/改数据)的查询类型,并不建议选择输入变化时自动执行的执行方式,因为用户往往希望确认输入完毕且无误后才触发写操作。因此如果识别到了写请求,系统会自动切换为手动触发执行,此外您需要添加一个按钮或链接来主动触发该查询。 例如:对于提交一个员工的核酸结果的查询,并不需要改动一个输入值(姓名/检测日期/结果),查询就运行一次;需要的是在用户填写完所有信息并确认正确后,再点击一个按钮一次性提交,如下图:
下面通过一张表来表明两种查询执行方式的不同:
输入变化时自动执行 | 手动触发执行 | |
---|---|---|
页面加载时自动运行 | 是 | 否 |
可通过按钮/链接触发 | 是 | 是 |
通知面板
通知面板用于快速设置查询执行成功/失败后的全局提示。查询执行方式不同,通知面板设定不同。
- 查询执行方式为输入变化时自动执行时
您可以设置执行失败后通知,下方展示了使用 JS 表达式判断查询结果为空时,弹出错误信息:
- 查询执行方式为手动触发执行时
除了配置失败通知,您还可以快速设置执行成功后的通知信息,下方展示了更新用户数据成功后通知:
💡 说明
您也可以设置查询执行成功/失败后的事件触发来实现全局提示,但码匠更建议您直接使用通知面板,因为其更方便快捷。
步骤 4:成功/失败后的事件动作
查询运行之后,您可能想触发更多查询或者其它操作。如:在更新某一用户信息后,希望刷新用户信息表的查询并且重置输入组件,那么您可以新建一个事件,并选择该查询执行成功后执行的动作,如下图:
⚠️ 注意
注意避免执行查询链条中的死循环!若
query1
成功后触发执行query2
,query2
成功后触发执行query1
,那么就形成了一个查询的死循环,两个查询将无止尽地运行下去。