今天遇到这个问题:Grails query not using GORM我想知道使用groovy.sql.Sql或JDBC是否带有连接池的好处?
在某些情况下,我可以看到GORMless如何有益,但缺乏conn pooling将会消除它作为一种选择。
我们是否也会从准备好的陈述中获益?
答案 0 :(得分:8)
DataSource
的一个主要用途是提供connection pooling.如果您在pooled = true
中设置了DataSource.groovy
,那么注入的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
答案 1 :(得分:6)
如果您的数据源配置为使用连接池,那么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