【发布时间】:2020-06-05 14:49:48
【问题描述】:
我认为通过 view-entity 从 MySQL 中查找实体数据是非常好的方法。但是在这里,我在某些情况下需要使用来自 MySQL 数据库的非常复杂的查询,比如 max 函数和 group by 和 order by 标准。有什么办法可以在 Moqui 中使用复杂查询?
【问题讨论】:
我认为通过 view-entity 从 MySQL 中查找实体数据是非常好的方法。但是在这里,我在某些情况下需要使用来自 MySQL 数据库的非常复杂的查询,比如 max 函数和 group by 和 order by 标准。有什么办法可以在 Moqui 中使用复杂查询?
【问题讨论】:
确实,您可以使用 View Entities 实现相当复杂的查询。查看entity-definition-2.1.xsd 文件以获取更多详细信息。您可以将聚合函数与<alias function="... 一起使用,并且将自动生成 GROUP BY 子句。也支持<order-by> 元素。
此外,您可以通过嵌套<complex-alias> 元素来利用任何SQL 函数和复杂表达式。请记住,您可以使用 <member-entity join-from-alias="... 创建 INNER JOIN 实体组合,并使用 <member-entity join-from-alias="..." join-optional="true" 创建 OUTER JOIN。
尽可能坚持 SQL 标准,以保持视图实体独立于数据库引擎。
【讨论】:
使用脚本标签,您可以在其中通过ExecutionContext getEntity 和getConnection 获得与数据库的连接。
ExecutionContext ec = context.ec
Connection con = ec.getEntity().getConnection(groupName)
def statement = con.createStatement()
def queryResult = statement.executeQuery(query)
然后只需按照java.sql 文档中的说明处理结果,并将其设置为先前定义的字段标记。
【讨论】: