【发布时间】:2012-09-06 01:49:17
【问题描述】:
今天碰到这个问题:Grails query not using GORM不知道用groovy.sql.Sql还是JDBC自带连接池的好处?
我可以看到在某些情况下使用 GORMless 可能是有益的,但缺乏 conn pooling 会消除它作为一种选择。
我们是否也能从准备好的语句中获益?
【问题讨论】:
今天碰到这个问题:Grails query not using GORM不知道用groovy.sql.Sql还是JDBC自带连接池的好处?
我可以看到在某些情况下使用 GORMless 可能是有益的,但缺乏 conn pooling 会消除它作为一种选择。
我们是否也能从准备好的语句中获益?
【问题讨论】:
DataSource 的主要用途之一是提供connection pooling. 如果您在DataSource.groovy 中设置了pooled = true,那么当您执行查询时,注入的dataSource 将为您提供来自池的连接。
Groovy SQL 还提供使用准备好的语句进行查询:
def sql = new Sql(dataSource)
def params = [10, 'Groovy', 'http://groovy.codehaus.org']
sql.execute 'insert into PROJECT (id, name, url) values (?, ?, ?)', params
您还可以在 Sql 对象上启用PreparedStatement 缓存以提高性能:
sql.cacheStatements = true
【讨论】:
如果您的数据源配置为使用连接池,则 groovy sql 将从中受益。
以服务为例:
class MyService {
//inject dataSource
def dataSource
def myMethod() {
Sql sql = new Sql(dataSource)
sql.execute("insert...") //this will get a connection from the pool
sql.close() //this will release the connection back to pool
}
}
要为您的方法使用相同的连接,请查看cacheConnection
【讨论】: