【发布时间】:2015-01-29 10:42:47
【问题描述】:
我使用的 Grails 没有通常的 H2 db。相反,我在本地和服务器上安装了 MySQL。
我需要在这个 MySQL 数据库中运行查询并在 GSP 中显示数据(准确地说:我想用 highcharts 将它们可视化)。存储所需信息的表与我的 Grails 项目中的域没有关联。
如何在不使用 PHP 的情况下访问数据?
【问题讨论】:
我使用的 Grails 没有通常的 H2 db。相反,我在本地和服务器上安装了 MySQL。
我需要在这个 MySQL 数据库中运行查询并在 GSP 中显示数据(准确地说:我想用 highcharts 将它们可视化)。存储所需信息的表与我的 Grails 项目中的域没有关联。
如何在不使用 PHP 的情况下访问数据?
【问题讨论】:
Grails 的一个美妙之处在于它建立在 Spring 和 Groovy 以及它们提供的所有美妙的东西之上。这意味着,您可以使用 Groovy SQL 包访问您的数据源。
可以在blog post 中找到一个非常详细的 Grails 示例。
这是一个简单的示例(仅对上述博客稍作修改):
package example
import groovy.sql.Sql
import groovy.sql.GroovyRowResult
class PersonService {
// Reference to default datasource, autowired into the service through DI.
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)
return results
}
}
关于Sql class 的Groovy API 也值得一看。
【讨论】:
在 DataSource.groovy 中,您可以为每个环境配置 DB。 默认情况下,用于 dev evn H2 基础,但用于生产 MYSQL。 配置示例:
development {
dataSource {
dbCreate = "none" // one of 'create', 'create-drop', 'update', 'validate', ''
username = "root"
password = "root"
url = "jdbc:mysql://localhost:3306/test"
driverClassName = "com.mysql.jdbc.Driver"
dialect = 'org.hibernate.dialect.MySQL5InnoDBDialect'
// logSql = true
}
}
使用 gorm http://grails.github.io/grails-doc/latest/guide/GORM.html#basicCRUD
【讨论】: