有谁知道通过Grails访问SQL视图的最佳方法是什么(或者这是否可能)?执行此操作的一种显而易见的方法似乎是对视图使用ecuteQuery,以便从视图中 Select 我们不会将其视为域对象列表的行的集合.然而,即使在这种情况下,对哪个域类运行ecuteQuery也不是很明显,因为我们实际上只是使用域类来对完全不相关的实体(视图)运行查询.

是否更愿意创建一个表示视图的域类,然后我们就可以对该域类使用list()?这似乎会有问题,因为Grails可能希望能够插入、更新、删除和修改任何域类的表模式.

[Edit:
Follow up question here: Grails Domain Class without ID field or with partially NULL composite field

推荐答案

您可以在Grails中使用纯SQL,这是访问视图的首选方式(IMO):

例如,在控制器中:

import groovy.sql.Sql

class MyFancySqlController {

    def dataSource // the Spring-Bean "dataSource" is auto-injected

    def list = {
        def db = new Sql(dataSource) // Create a new instance of groovy.sql.Sql with the DB of the Grails app

        def result = db.rows("SELECT foo, bar FROM my_view") // Perform the query

        [ result: result ] // return the results as model
    }

}

和视图零件:

<g:each in="${result}">
    <tr>
        <td>${it.foo}</td>
        <td>${it.bar}</td>
    </tr>
</g:each>

我希望来源是不言而喻的.百人组

Database相关问答推荐

在 PostgreSQL 的数组列中查找字符串

预测下一个自动插入的行 ID (SQLite)

在 model.save() 中处理竞争条件

哪个本地数据库适合 Windows 8 应用store 应用?

便携式(PHPPass)密码哈希.我应该使用它们吗?

Spring Boot:如何使用多个模式并在运行时动态 Select 使用哪一个

如何在运行时备份嵌入式 H2 数据库引擎?

如何允许多个用户同时连接到我的 H2 数据库?

为什么 DynamoDB 查询中没有**not equal**比较?

如何在构建时创建填充的 MySQL Docker 映像

SQLite 中内存数据库的优势

如何在 MSSQL 2005 中创建递归查询?

MySQL 转储所有数据库并在导入时创建(或重新创建)它们?

将 .csv 文件导入 Android 中的 Sqlite

将一行连接到另一个表中的多行

如何将纬度/经度对转换为 PostGIS 地理类型?

Firebase 排行榜排名

Phonegap 离线数据库

使用 PHP/MySQL 导入 CSV 数据

与内连接相反