В предыдущем посте мы узнали, как мы можем использовать собственные 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 . |