Grails精華:使用Groovy SQL

在前一篇文章裏,咱們學習了在Grails應用中使用Hibernate SQL。一樣的,咱們也可使用Groovy SQL執行自定義的SQL語句。咱們必須建立一個groovy.sql.Sql實例來執行SQL代碼。最簡單的方式就是將javax.sql.DataSources做爲一個構造函數的參數傳給groovy.sql.Sql。在Grails應用的上下文中,已經存在一個DataSource實例,咱們只須要將其注入到咱們的代碼中。在Grails應用中必須使用dataSource來引用那個默認的數據源。html

在下面的樣例中,咱們使用Groovy SQL執行一個自定義查詢。請注意,在Grails service PersonService中,咱們定義了一個屬性dataSource,Grails會自動注入一個DataSouce實例。java

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實例注入到咱們的service中了。在grails-app/conf/spring/resources.groovy,咱們定義一個Sqlbean:spring

// 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'))
	 
	}

如今咱們使用groovySqlbean重寫上的例子:sql

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。app

相關文章
相關標籤/搜索