SQL 数据集

动态数据集(数据表)使用简单,系统提供过滤条件、排序、关联查询等配置界面。使用时,系统根据配置形成 SQL。当系统生成的 SQL 不能满足需求时,例如要实现 union 查询、跨库查询,可以使用 SQL 数据集,SQL 数据集具有以下特点:

  • 通过一个自定义的 SQL 实现数据查询
  • 支持将数据更新到一张数据表
  • 支持在数据组件上配置的过滤条件
  • 过滤条件只能作用到外层 SQL,因此,还支持在 SQL 中使用参数

综上所述,SQL 数据集是对动态数据集的扩展,具有动态数据集的完整能力。

SQL 数据集和视图数据集都是使用一个 SQL 的查询,但是,使用视图数据集需要在物理数据库中建立视图,而且视图数据集不支持使用参数,因此建议使用 SQL 数据集,不建议使用视图数据集。

数据集设计

在动态数据集的右侧,点击+按钮,可以创建新的 SQL 数据集:

1705317127090

1705317127090

定义 SQL 查询语句

创建好 SQL 数据集后,最重要的是设置查询 SQL 语句。SQL 语句的生成,常用的有 2 种方式:

  • 使用查询生成向导

适合常规、简单的查询逻辑,UI 上可以配置查询列,以及配置多表关联查询

1705313761312

设置后,会在查询语句输入框自动生成对应的 SQL 语句:

1705313788732

  • 直接写 SQL 语句

对一些比较复杂的、个性化的查询逻辑,可以直接写在输入框中写入 SQL 语句。在输入框写入之前,比较好的实践经验是,先在 adminer 在线数据库管理工具中进行组装和测试,获取返回结果是不是期望的内容,例如:

image-20240102175336538

测试结果没问题之后,再放入到输入框中:

image-20240102175526966

特别说明

  • 写 SQL 时,注意数据表名和数据集名的对应关系,一般来说,数据集名为 xxx,数据表名为 main_xxx
  • SQL 数据集里面的 SQL 即支持写数据集名、列标识,也支持写数据表名、列名
  • 在 adminer 等数据库工具中执行 SQL 时,SQL 只支持数据表名、列名
  • 跨库访问

要跨库访问其它数据库表时,需要在数据表前面加上数据库名.实例名.,如下图所示

定义查询参数

为方便传入变量进行查询,SQL 数据集支持在 SQL 语句中添加自定义查询参数。

  • 定义参数

在数据集参数中添加默认参数:

1705317127090

输入参数基本属性,选择查询参数,勾选输入,并设置数据类型。另外,可设置默认值、约束值等。

1705317127090

  • 引入参数

定义好参数后,在 SQL 语句中使用 :参数名 的形式进行引入,比如:

1705315368425

通过以上步骤,就完成了查询参数的添加。在页面上的数据组件中,可以在过滤条件中设置参数的值

1705317127090

过滤列中列出数据集中的列和查询参数。查询参数只支持等于操作符。如下图所示,值设置为“鼠标”,在 SQL 语句中把 :参数名 替换为对应的值,即:product.type = :type 变成 product.type = '鼠标'

1705317094910

定义数据列

SQL 数据集要返回的列,可以在结构页签中自行设计。需要快捷操作的话,可以点击自动同步功能,会根据返回的列,自动把结构对应添加上去:

image-20240102175929386

1705315602234

设计完成后,点击页面右上角的保存按钮即可保存。

保存路径

  • 数据集的模型描述文件

xxx.data.m 保存在当前模块的根目录下,比如 main 模块的根目录下:

1705315876662

在 .data.m 文件中,会使用 <class type="sql" 来标识 SQL 数据集:

1705315951044

同时在文件中,也能找到之前定义的 SQL 语句内容:

1705316051497

使用场景

例如:应用中有订单主表和订单从表两张表,为主从表。需求:在主表中显示从表记录数,如下图所示

1722250576802

使用 SQL 数据集实现,页面上不使用订单主表,使用 SQL 数据集:订单主表 SQL

1722250627186

订单主表 SQL 的 SQL 定义如下,在原有订单主表的基础上,增加一列 detailNum,使用子查询查询从表记录数。另外在“更新到表”中选择订单主表,这样调用保存数据时,数据会写入订单主表

1722250730081

在 SQL 数据集的数据列中添加新增的列 detailNum

1722250696073

一个正常使用的数据组件对应的数据集是必须有主键的,SQL 数据集也不例外,请务必设置主键,如下图所示

1722251175821

results matching ""

    No results matching ""