2012-07-16 62 views
0

我有一段代碼連接到數據庫並執行一個查詢,我不明確放置此代碼(模型/服務)。在哪裏把數據庫相關的代碼在Grails

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)其中,把查詢執行邏輯

回答

1

如果您尚未創建一個域對象來表示application_configuration,你應該考慮的是,用domain object findersHQL

如果您需要在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

查詢執行那張服務側。

該視圖與控制器交互,該控制器與服務交互,最後一個與數據庫的數據映射到定義的模型對象。

數據庫連接登錄的推移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/" 
    } 
} 
} 
+1

也不需要執行使用Groovy SQL對象,你可以直接與你的域對象進行交互,例如, 'ApplicationConfiguaration.list {eq「fieldName」,value}' – tojofo 2012-07-16 11:37:30