Grails中使用groovy.sql.Sql或JDBC的连接池和预准备语句

时间:2012-09-06 01:49:17

标签: sql grails jdbc groovy

今天遇到这个问题:Grails query not using GORM我想知道使用groovy.sql.Sql或JDBC是否带有连接池的好处?

在某些情况下,我可以看到GORMless如何有益,但缺乏conn pooling将会消除它作为一种选择。

我们是否也会从准备好的陈述中获益?

2 个答案:

答案 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