数据查询支持和管理 - XPath、OQL、SQL 和 OData | Mendix 评估指南

Skip navigation

Data Querying & Management

Mendix 支持哪些查询语言?

Mendix 提供多种方法指定要检索的数据:

  • Mendix Studio Pro 和 Mendix Studio 都提供了通过表达式编辑器指定查询需求的可视化方法
  • 检索特定对象或一组相关对象,可以使用 XPath 表达式(请参见下面的 XPath
  • 对于需要将多个实体聚合和合并为单个结果集重要的报表需求,Mendix 提供 OQL 查询(请参见下面的 OQL
  • 如果要在应用程序数据库上使用 SQL 查询,则可以使用 Java API(请参见下面的 SQL
  • 为与其他应用程序或数据分析工具共享数据,Mendix 为域模型中实体提供现成的 OData 支持(请参见下面的 OData
  • XPath

    XPath 是一种易于使用的查询语言,可以检索特定对象。您可以使用它获取要在页面中显示或编辑的对象,并通过微流修改这些对象。

    您可以通过 XPath 定义表达式以过滤感兴趣的对象,还可以使用关联来检索和过滤相关的对象。

    XPath 自动确保应用您在实体上定义的所有访问规则。

    有关更多信息,请参阅 Mendix Studio Pro 指南中的 XPath

  • OQL

    Mendix 对象查询语言 (OQL) 是基于 SQL 的关系查询语言。OQL 相对于 SQL 的主要优势在于,OQL 使用模型中使用的实体和关联名称,而非实际数据库表名称。

    OQL 可以使用预定义的关系(关联)轻松连接对象,而不必计算应耦合的列。尽管存在这些区别,许多 SQL 关键字也可以在 OQL 中使用。

    OQL 主要用于报告在某些属性上分组时,需要聚合函数的位置。使用 OQL 的另一个原因是能定义自定义安全性表达式,这需要手动进行定义。某些情况下,如果您自行使用 OQL 来处理安全性问题,而不非依赖 XPath 的现成安全性问题解决措施,查询速度可能会更快。

    有关更多信息,请参见 Mendix Studio Pro 指南中的 OQL

  • SQL

    所有应用程序数据都存储在关系数据库中。在 Mendix Cloud 里是 PostgreSQL,但也有其他选项,具体取决于部署环境。

    Mendix 提供 Java API,可直接与底层关系数据库交互。您可以通过 Mendix Java API 使用 Java JDBC 运行 SQL 查询和执行存储过程。这为您提供了一种非常强大的数据使用方式,但是需要了解关系数据库系统和 SQL。您可以使用特定于数据库供应商的扩展,但这将限制您的应用程序对其他数据库的可移植性。

    有关从 Mendix 访问 JDBC API 的更多信息,请参见 DataStorage.executeWithConnection

  • OData

    OData 在 REST 协议之上提供了通用的数据访问和查询接口。它使大量第三方工具能够以受控制的方式访问您的数据。这些工具包括 LINQPad 之类的基本查询工具、msexcel 之类的电子表格以及 PowerBI 和 R 之类的商业智能分析工具。通过 OData 提供访问,所有在数据上定义并由 Mendix Runtime 处理的验证和安全约束都能保证得到应用。这意味着 OData 是一种安全的向外部方提供数据访问的方法。

    OData 是一种概括性标准,提供对数据的查询和操作功能,Mendix 目前只支持查询功能。目前,Mendix 中的 OData 旨在通过第三方应用程序对 Mendix 数据进行只读分析。

    有关在 Mendix 中使用 OData 的更多信息,请参见通过 Mendix OData 将数据转化为洞察力使用 R 从 Mendix 应用程序中的数据中获得洞察力博客文章。

如何实现查询优化?

Mendix 平台提供了许多现成的优化功能。例如,当通过 XPath 检索页面数据时,Mendix 将自动一次性检索页面上使用的所有相关信息。为此使用了一个称为模式的概念。模式告知数据检索组件不仅要从数据库中检索一组特定的对象,还要在结果中包括特定的关联实体。

除了优化查询之外,Mendix 还进行优化以避免查询需求。例如,优化是在 Web 客户端中完成的,在该客户端中,对象通过多个页面进行缓存和重用。Mendix Runtime 中所做的另一个优化是使用页面结构的知识来确定是否需要从 Runtime 向客户端发送对象。

除了这些现成的优化之外,您还可以采取许多其他方法实现查询优化:

  • 仅检索您需要的内容,并确保查询中没有包含不需要的属性或对象
  • 确保您有以下内容索引
      • 定期搜索或过滤

    的列

    • 用于排序的列

在某些情况下(尤其是存在大量对象时),使用特定于数据库的索引会有所帮助。您可以通过 JDBC API 创建这些文件,如上文 SQL 所述。

如何从现有数据库中迁移数据?

您可能想要在新的 Mendix 应用程序中使用旧的非 Mendix 应用程序中的现有数据。如果您需要一次性迁移到您的 Mendix 应用程序中,可以使用下面描述的选项。

  • 数据库复制模块

    Mendix Marketplace 提供的数据库复制模块可连接到大量不同类型的数据库。它将显示现有数据库中存在的数据结构。然后,您可以(通过网页)定义要迁移到 Mendix 数据库的数据。还可以定义如何将现有列中的数据映射到实体属性。

  • 数据库连接器

    数据库连接器模块为您提供微流活动,以便在任何支持 JDBC 的数据库上运行查询功能。这意味着您可以创建微流来定义希望从现有数据库中获取的数据,以及定义将这些数据转换为新的 Mendix 应用程序的方式。

  • 从现有数据库初始化您的应用程序数据库

    首次部署 Mendix 应用程序时,您可以选择使用现有 Mendix 应用程序中的数据对其进行初始化。此功能的主要目的是支持数据从一个环境迁移到另一个环境中(例如,从 Mendix Cloud 到私有云)。将非 Mendix 数据迁移为 Mendix 数据后,可以使用此数据初始化新的 Mendix 应用程序。这适用于在同一供应商以及两个数据库供应商之间的数据迁移。这意味着您可以使用在工作站上运行的 PostgreSQL 数据库中的数据初始化 Azure SQL 数据库。

    有关更多信息,请参见“Mendix 文档”中的如何迁移 Mendix 数据库备份

如何使用 Mendix 中的现有 SQL 数据库?

您可以使用 Database Connector 所用的任何数据库上运行 SQL 操作。有关使用现有 SQL 数据库的更多信息,请参见外部数据中的 Mendix 如何支持对外部 SQL 数据库的直接访问?

Mendix 提供哪些 API 来扩展数据存储行为?

Mendix 运行时提供了 Java API,可用于可以扩展数据存储行为。Mendix 使您能够通过正常的微流活动提供这些扩展,从而确保您团队中的任何人都可以使用这些扩展。有关 Mendix 扩展性功能的更多信息,请参见开放性(API 和 SDK)中的 Mendix 公开哪些 API?

关于数据存储可扩展性,主要 Java API 提供了以下功能:

如何控制连接池?

您可以使用自定义设置 ConnectionPoolingMaxActive 配置每个运行时与数据库的并发数据库连接数。

有关其他相关池设置的信息,请参见 Mendix Studio Pro 指南中的自定义