我有一段连接到数据库并执行查询的代码,我不清楚放置这段代码(模型/服务)。
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)在哪里放置查询执行逻辑
答案 0 :(得分:1)
如果您尚未创建域对象来代表application_configuration
,则应考虑这一点,并使用domain object finders或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
}
}
}
答案 1 :(得分:-1)
查询执行在服务端进行。
视图与Controller交互,这个与服务进行交互,最后一个与DB的数据相互映射到定义的Model对象。
数据库连接登录在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/"
}
}
}