【问题标题】:Gorm equivalent for SQL相当于 SQL 的 Gorm
【发布时间】:2012-11-20 10:09:48
【问题描述】:

简单的一个 - 在 Grails/Gorm 中获得与此 SQL 查询相同效果的最佳方法是什么:

选择年份(日期)作为销售年份, MONTH(date) 作为 SalesMonth, SUM(Price) AS TotalSales 从销售 GROUP BY YEAR(date), MONTH(date) ORDER BY YEAR(date), MONTH(date)

【问题讨论】:

  • 可以使用HQL,见executeQuery。
  • 对不起,这没有多大帮助 - 有点像说,你可以使用 Java - 请参阅 javadoc...
  • 好吧,Grails 文档不仅仅是一个 javadoc,我认为这不是一个公平的例子,但我回答了你的问题并指出了来源。

标签: grails grails-orm


【解决方案1】:

域类的executeQuery 方法允许您运行HQL 查询。

如果你看一些例子,你会注意到Hibernate Query Language 记住了很多 SQL,但它是面向对象的。

来自 Grails 文档:

executeQuery 方法允许执行任意 HQL 查询。 HQL 查询可以返回域类实例,或者指定的数组 查询选择单个字段或计算值时的数据。

因此,在您的情况下,查询将返回指定数据的数组,因为不匹配域类,但您将能够迭代此数据。

假设您将销售表映射为销售域类:

class Sales {
  Date date
  BigDecimal price
  ...
  static mapping = {
    ...
  }
}


def result = Sales.executeQuery("SELECT YEAR(date) as SalesYear, MONTH(date) as SalesMonth, SUM(Price) AS TotalSales FROM Sales GROUP BY YEAR(date), MONTH(date) ORDER BY YEAR(date), MONTH(date)")

//iterate over the result
result.each { sales ->
  println sales[0] //year
  println sales[1] //month
  println sales[2] //total
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2010-10-25
    相关资源
    最近更新 更多