我对Grails (和Groovy)还有点陌生,所以如果这个问题看起来很蠢的话,我很抱歉。
我试图访问一个SQL数据库,而且我似乎可以在Controller中使用SQL命令(取自这个StackOverflow问题):
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表,如果这个跟进问题说您可以断开域类与数据库的连接,那么域类有什么用途呢?我想做一些sql查询来插入、更新、删除等数据,所以我想知道最好的方法是什么。
发布于 2014-06-16 16:25:55
域类用于对应用程序中的知识域进行建模。这不仅是数据的结构,也是这些模型在您的知识领域内相互作用的基础。
尽管如此,您没有理由不能在没有任何域类的情况下创建Grails项目,并使用您自己的SQL语句在数据库中创建、读取、更新和删除数据。我在没有域类的项目上工作过,所有的东西都是使用DTO (数据传输对象)和服务来访问已经存在的数据库和表建模的。
当然,如果不使用域类,就会失去与GORM的集成,但对于您的情况来说,这似乎不是一个问题(在我前面描述的情况中也不是这样)。
那是圣杯之美的一部分。您不必全部使用,您只能使用对您的项目有意义的部分。
发布于 2014-06-16 18:11:16
在我的一个项目中,我需要将MySQL的内容转储到Lucene索引中。为这种一次性操作创建整个域类结构将是过度的,所以groovy做得很好。
所以,我的回答是不,如果您不想使用域类,就不必使用域类。
我同意@乔舒亚-摩尔的说法,如果你使用得当,域类可以大大简化你的项目。
发布于 2014-06-17 02:27:22
我同意这两个答案,但对于您的特殊情况,我建议为基础表建立一个域模型。
原因:
transactions以进行更新操作。使用GORM和Hibernate,您可以自动处理这个问题。db-reverse-engineer插件为现有表创建域类。https://stackoverflow.com/questions/24247940
复制相似问题