我仍然是Grails(和Groovy)的新手,如果这个问题看起来很愚蠢,那么道歉。
我正在尝试访问SQL数据库,似乎我可以在Controller中使用SQL命令(取自this StackOverflow question):
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
}
}
我知道如果我要用一些变量创建一个域类,它会在SQL中创建一个数据库表:
package projecttracker2
class ListProject {
String name
String description
Date dueDate
static constraints = {
}
}
但这将创建名为“list_projects”的表。如果我没有那样做,只是在Grails之外创建了SQL表,如果这个follow-up question表示你可以断开Domain类与数据库的连接,那么Domain类的用途是什么?我正在寻找一些sql查询来插入,更新,删除等数据,所以我想知道最好的方法是什么。
答案 0 :(得分:1)
域类用于在应用程序中为您的知识领域建模。这不仅是数据的结构,也是您知识领域内这些模型的互动基础。
也就是说,没有任何理由可以创建没有任何域类的Grails项目,并使用您自己的SQL语句来创建,读取,更新和删除数据库中的数据。我曾参与过没有域类的项目,所有项目都使用DTO(数据传输对象)和服务建模,用于访问现有的数据库和表。
当然,如果不使用Domain类,您将失去与GORM的集成,但这对您的案例来说似乎不是问题(在我上面概述的情况下也是如此)。
这是Grails之美的一部分。您不必全部使用它,您只能使用对您的项目有意义的部分。
答案 1 :(得分:1)
在我的一个项目中,我需要将MySQL的内容转储到Lucene索引中。为这样的一次性操作创建整个域类结构将是一种矫枉过正,因此groovy SQL API做得很好。
所以,我的答案是否定的,如果你不想,你不得不使用域名类。
我同意@ joshua-moore所说的话,如果你正确使用它们,域类可以大大简化你的项目
答案 2 :(得分:1)
我同意这两个答案,但针对您的具体情况,我建议为基础表提供域模型。
原因:
transactions
以进行更新操作。使用GORM和Hibernate,您可以自动处理。db-reverse-engineer
插件