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 というクラスがあり、このドメインでクエリを実行しています。

2つの疑問があります

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

クエリの実行はサービス側で行われます。

ビューはコントローラーと相互作用します。これはサービスと相互作用し、最後のビューは定義されたモデルオブジェクトにマッピングするDBのデータと相互作用します。

データベース接続のログインは、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 に答える