6

今天碰到这个问题:Grails query not using GORM不知道使用groovy.sql.Sql还是JDBC有连接池的好处?

我可以看到在某些情况下使用 GORMless 可能是有益的,但缺乏 conn pooling 会消除它作为一种选择。

我们是否也能从准备好的语句中获益?

4

2 回答 2

8

a 的主要用途之一DataSource是提供连接池。如果您已设置pooled = trueDataSource.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

您还可以PreparedStatement在 Sql 对象上启用缓存以提高性能:

sql.cacheStatements = true
于 2012-09-06T02:40:34.277 回答
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

于 2012-09-06T01:57:20.423 回答