В предыдущем посте мы узнали, как мы можем использовать собственные 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.grailsimport groovy.sql.Sqlimport groovy.sql.GroovyRowResultclass 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.groovybeans = { // 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 . |