sql - 在 Grails 中执行查询

标签 sql grails grails-orm

我在 Groovy 中编写 SQL 查询时遇到了一点问题(v2.1.7。甚至不要问,为什么它这么旧:))。所以我有三个表要加入,我可以通过第三个表加入它们的 id,其中包含 id 对。但是,我想创建一个左连接,所以所有内容,即使它在右侧为空,也应该进入连接表 - 问题是,无论我做什么,包含空的行都不会出现。我怀疑这是关于包含对的表,但我不确定。

Table1 {
  id
  sth
}

Table2 {
  id
  ath
}

Table3 {
  t1id
  t2id
}

在其 Groovy 文件中,Table1 在 Table2 上有一个 hasMany 关系。
static hasMany = [t2s: Table2]

据我所知,我必须通过这些关系加入。

我的 SQL 查询如下所示:
Table1.executeQuery(
   "SELECT t1.sth, t2.ath " +
   "FROM Table1 t1 LEFT JOIN t1.t2s t2 " +
   "WHERE t1.sth = ......)

有没有其他方法可以在 Grails 中编写 SQL 查询?

最佳答案

试试 Groovy Sql 对象,它非常简单:

只需在你的类定义下添加 def dataSource 行,Grails 就会注入(inject)你的数据源,或者如果只使用 Groovy,你可能需要创建一个数据源。然后创建一个 Sql 对象并使用该对象,它将返回结果的哈希映射。

def dataSource

Sql sql = new Sql(dataSource)
def rows = sql.rows("select * from PROJECT where name like 'Gra%'")

以下是创建自己的数据源的方法:
def db = [url:'jdbc:hsqldb:mem:testDB', user:'sa', password:'', driver:'org.hsqldb.jdbc.JDBCDriver']
def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)

从这里的 Sql 对象文档中获得了大部分内容:

http://docs.groovy-lang.org/latest/html/api/groovy/sql/Sql.html

关于sql - 在 Grails 中执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32871425/

相关文章:

mysql - 如何使用 bigdump.php 在我的本地 wamp 服务器上上传大型 sql 数据库

mysql - 检查mysql中n个数字是否相等

groovy - Grails 中测试/开发模式的自定义 init

mysql - 我可以使用 gorm 将 MySQL 中的现有字段增加 1 吗?不使用原始 SQL

Grails:TypeMismatchException - 提供了错误类型的 id - 预期:类 java.lang.Integer,得到类 java.lang.Long

sql - 如何在 SQL 中请求随机行?

sql - 在 SQL Server 中将多行与列转换为单行

macos - 使用TextMate打开Grails项目

javascript - groovy.lang.MissingMethodException

Grails GORM Criteria Query Eager Fetching