groovy grails
在上一篇文章中,我们学习了如何在Grails应用程序中使用Hibernate本机SQL查询。 我们还可以使用Groovy SQL执行自定义SQL 。 我们必须在代码中创建groovy.sql.Sql
的新实例以执行SQL代码。 最简单的方法是将javax.sql.DataSource
用作groovy.sql.Sql
类的构造函数参数。 在Grails应用程序上下文中,我们已经有一个DataSource
,我们可以使用它将其注入到我们的代码中。 我们必须使用名称dataSource
来引用Grails应用程序中的默认数据源。
在以下示例中,我们使用Groovy SQL调用自定义查询(针对Firebird)。 注意,我们在Grails服务PersonService
定义了一个属性dataSource
,Grails将自动注入一个DataSource
实例。
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
}
}
我们甚至可以在Grails应用程序groovy.sql.Sql
实例成为Spring bean。 然后,我们可以将Sql
实例注入Grails服务中。 在grails-app/conf/spring/resources.groovy
我们定义Sql
bean:
// 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'))
}
现在,我们可以重写前面的示例,并使用bean groovySql
:
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编写的代码。
翻译自: https://www.javacodegeeks.com/2014/03/grails-goodness-using-groovy-sql.html
groovy grails