Статьи

Grails Good: использование Groovy SQL

В предыдущем посте мы узнали, как мы можем использовать собственные SQL-запросы Hibernate в нашем приложении Grails. Мы также можем выполнить пользовательский SQL с помощью Groovy SQL . Мы должны создать новый экземпляр groovy.sql.Sql в нашем коде для выполнения кода SQL. Самый простой способ — использовать javax.sql.DataSource в качестве аргумента конструктора для класса groovy.sql.Sql . В контексте приложения Grails у нас уже есть DataSource и мы можем использовать его для внедрения в наш код. Мы должны использовать имя dataSource для ссылки на источник данных по умолчанию в приложении Grails.

В следующем примере мы вызываем пользовательский запрос (для Firebird), используя Groovy SQL. Обратите внимание, что мы определяем свойство dataSource в сервисе Grails PersonService и Grails автоматически DataSource экземпляр DataSource .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.mrhaki.grails
 
import groovy.sql.Sql
import groovy.sql.GroovyRowResult
 
class PersonService {
 
    // Reference to default datasource.
    def dataSource
 
    List<GroovyRowResult> allPersons(final String searchQuery) {
        final String searchString = "%${searchQuery.toUpperCase()}%"
 
        final String query = '''\
            select id, name, email
            from person
            where upper(email collate UNICODE_CI_AI) like :search
        '''
 
        // Create new Groovy SQL instance with injected DataSource.
        final Sql sql = new Sql(dataSource)
 
        final results = sql.rows(query, search: searchString)
        results
    }
 
}

Мы даже можем сделать экземпляр groovy.sql.Sql компонентом Spring в нашем приложении Grails. Затем мы можем внедрить экземпляр Sql например, в сервис Grails. В grails-app/conf/spring/resources.groovy мы определяем Sql bean-компонент:

1
2
3
4
5
6
7
8
9
// File: grails-app/conf/spring/resources.groovy
beans = {
  
    // Create Spring bean for Groovy SQL.
    // groovySql is the name of the bean and can be used
    // for injection.
    groovySql(groovy.sql.Sql, ref('dataSource'))
  
}

Теперь мы можем переписать наш предыдущий пример и использовать боб groovySql :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.mrhaki.grails
  
import groovy.sql.GroovyRowResult
  
class PersonService {
  
    // Reference to groovySql defined in resources.groovy.
    def groovySql
  
    List<GroovyRowResult> allPersons(final String searchQuery) {
        final String searchString = "%${searchQuery.toUpperCase()}%"
  
        final String query = '''\
            select id, name, email
            from person
            where upper(email collate UNICODE_CI_AI) like :search
        '''
  
        // Use groovySql bean to execute the query.
        final results = groovySql.rows(query, search: searchString)
        results
    }
  
}

Код, написанный с помощью Grails 2.3.7.

Ссылка: Grails Good: использование Groovy SQL от нашего партнера по JCG Хьюберта Иккинка в блоге JDriven .