0

我有一段连接到数据库并执行查询的代码,我不清楚放置此代码(模型/服务)。

def value
def url      = ConfigurationHolder.config.dataSource.url
def username = ConfigurationHolder.config.dataSource.username
def password = ConfigurationHolder.config.dataSource.password
def driver   = ConfigurationHolder.config.dataSource.driverClassName
def sql      = Sql.newInstance(url, username, password, driver)

sql.eachRow("select field_value from application_configuration where field_name=?", [field]) {
        value=it.field_value
}

我有一个名为 ApplicationConfiguaration 的类,我在这个域上进行查询。

我有两个疑问

1) 数据库连接逻辑放在哪里 2) 查询执行逻辑放在哪里

4

2 回答 2

1

如果您还没有创建域对象来表示application_configuration,您应该考虑这一点,并使用域对象查找器HQL

如果您需要在 GORM 之外执行查询,它可能应该放在服务中。请注意,可以将 DataSource 对象自动注入到您的服务中,并且可以直接从中创建 Sql 对象。你可以有这样的东西:

import groovy.sql.Sql

class ApplicationConfigurationService {
    def dataSource

    def valueForName(name) {
        def sql = new Sql(dataSource)

        sql.eachRow(...) {
            value=it.field_value
        }
    }
}
于 2012-07-16T14:19:43.073 回答
-1

查询执行在服务端进行。

视图与控制器交互,这个与服务交互,最后一个与数据库的数据进行交互,将其映射到定义的模型对象。

数据库连接登录继续 DataSource.groovy con /Conf

DataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
}
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}
// environment specific settings
environments {
development {
    dataSource {
        dbCreate = "update" // one of 'create', 'create-drop','update'
        url = "jdbc:mysql://localhost:3306/"
        username=""
        password=""
    }
}
test {
    dataSource {
        dbCreate = "update"
        url = "jdbc:mysql://localhost:3306/"
        username=""
        password=""

    }
}
production {
    dataSource {
        dbCreate = "update"
        jndiName = "java:comp/env/"
    }
}
}
于 2012-07-16T07:48:14.087 回答