数据存储工具 - 持久和非持久对象 | Mendix 评估指南

Skip navigation

Data Storage

如何在 Mendix 中定义数据?

在 Mendix 中,您可以使用域模型定义数据需求。应用程序项目中的每个模块都可以拥有自己的域模型,该域模型由一个或多个实体组成。这些实体可以是持久的,也可以是非持久的,还包含了一个或多个对象。

持久对象存储在数据库中,Mendix 会自动创建表,将实体存储在数据库中。会针对每个对象在表中插入一条记录。非持久实体仅在用户会话期间存于内存中。

可以针对每个实体定义属性以及属性应包含的数据类型。还可以定义安全规则、可看特定数据的对象以及验证规则。验证规则指定属性允许哪些值。

当您启动或重新部署应用程序时,Mendix 会自动创建数据库表来存储您的数据。重新部署后,所有应用程序表均会根据需要自动更改,并将数据迁移到新的表结构中。

持久和非持久对象间有什么区别?

持久对象存储在数据库中,因此可以跨会话和跨用户使用数据。但,由于非持久实体仅在用户会话期间存于内存中,不能跨用户或跨用户会话共享。

非持久性实体主要用于不希望存储所有中间结果的计算,或者用于临时存储通过不同集成方式从外部系统获取的数据。

对象关系映射如何在 Mendix 中发挥作用?

Mendix 对象关系映射 (ORM) 处理数据库管理的所有事项,从建模数据需求到最流行的关系数据库系统的技术存储和检索。Mendix ORM 的主要目标是让用户不再需要思考数据库技术方面问题,如如何创建和修改表或访问和更新数据。

  • 数据定义语言

    Mendix ORM 部署应用程序时从数据定义语言 (DDL) 阶段开始,当您在域模型中对它们进行建模时,它将根据您的业务数据需求自动创建正确的数据库结构。

    创建的数据库结构将包括表、数据类型、关联、相关约束甚至继承。

    重要的是要注意,每当您对应用程序进行更改时,基础数据库表都会相应地自动更新。您的数据也将被迁移。

    Mendix 平台通过处理表创建和数据迁移可帮助您快速交付应用程序。您不必自己管理数据库架构。同样重要的是,对于大多数迁移(例如,属性重命名或类型更改),Mendix 还会自动执行数据迁移。

    在私有云环境中或在内部部署时,您确实有权选择自己管理数据库。在这种情况下,您可以将 Mendix 生成的 SQL 作为起点,然后将其交给数据库管理员,这样他们就可以确保根据需要创建数据库。

    数据迁移阶段还可以将数据跨数据库供应商从一个 Mendix 应用程序迁移到另一个中。如果想要从本地迁移到云或从一个云迁移到另一个云中,这很有用。有关更多信息,请参见 Mendix Studio Pro 操作方法中的如何迁移您的 Mendix 数据库

     

  • 数据检索

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

    • Mendix Studio Pro 和 Mendix Studio 都提供了指定查询需求的可视化方法
    • 检索特定对象或一组相关对象,可以使用 XPath 表达式

    • 对于需要将多个实体聚合和合并为单个结果集重要的报表需求,Mendix 支持 OQL 查询

    在这种情况下,所有检索首先被转换成 XPath,然后被转换成 OQL,最后被转换成特定于数据库的 SQL 语句。

    检索数据时,Mendix ORM 为您执行以下步骤:

    1. 将 XPath 查询转换为 OQL 查询。
    2. 包括其他检索要求(例如,页面也需要的相关对象)。
    3. 应用在您的实体上定义的安全规则。
    4. 将您的实体映射到技术数据库表。
    5. 将您的实体属性映射到表列。
    6. 优化所需的 OQL 语句。
    7. 将 OQL 语句转换为特定于数据库的 SQL 语句。
    8. 从数据库中检索记录。

    如您所见,Mendix ORM 进行了许多性能优化,这些优化并非微不足道。由于应用程序模型的存在,Mendix 平台一次查询关联的数据库记录的效率更高。

如何使用索引来提高性能?

索引是在实体的基础数据库表上为其创建数据库索引的属性列表。在搜索字段、数据或模板网格的 XPath 约束或 XPath 查询中使用索引属性,可提高检索对象的速度。

使用 Mendix Studio 和 Mendix Studio Pro 中的实体属性菜单添加索引。可以将多个索引添加到一个实体。

如何在 Mendix 中使用存储过程?

Mendix 存储过程的使用取决于数据所在的位置。

如果想在 Mendix 应用程序的数据库中使用存储过程,则可以使用 Mendix Java API。有关更多信息,请参见 Mendix Studio Pro 操作方法中的如何使用 Java API。有关使用 JDBC 在 Mendix 应用程序数据库上执行 SQL 语句的更多信息,请参见 D数据存储与连接执行

如果您使用的是外部数据库,则可以使用 Mendix 市场中提供的数据库连接器附加组件。

如果要在现有的旧数据库上构建,则调用存储过程至关重要。在这一领域,有很多 Oracle 关系数据库管理系统 (RDBMSs)。Mendix Marketplace 中提供的 Oracle Connector (Beta) 支持旧 Oracle 数据库中的常见功能,例如,使用 PL/SQL 存储过程和程序包构建的 table API,引用游标和用户定义类型。

Mendix 如何处理事务管理?

对 Mendix Runtime 的每个请求都会使一个新事务自动启动。成功完成请求后,事务将与所有相关数据一起提交。如果发生错误,则会默认回滚所有数据更改。您可以选择提供自定义错误处理逻辑来更改此默认行为。

在下面微流中,定义了一个自定义错误处理程序。当更改活动失败的时候,对数据库所做的任何更改都会回滚。错误处理程序定义了要对事务执行的操作:可以回滚微流中发生的所有事情,或者可以补偿问题并继续。在本例中,生成了一条日志消息,之后微流以错误提示结束。然后,调用微流可以决定如何处理这个问题。

Mendix 支持什么数据库?

Mendix 应用程序默认可以部署到许多不同的数据库服务器中。只要未使用任何特定于数据库的代码,就可以随时切换数据库供应商。

Mendix 平台支持系统要求数据库中列出的由 Mendix Runtime 管理数据的数据库服务器。