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

vec*_*tor 6 sql grails groovy jdbc

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

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

我们还能从准备好的陈述中获益吗?

Ken*_*Liu 8

a的主要用途之一DataSource是提供连接池.如果已设置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
Run Code Online (Sandbox Code Playgroud)

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

sql.cacheStatements = true
Run Code Online (Sandbox Code Playgroud)


Sér*_*els 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
  }
}
Run Code Online (Sandbox Code Playgroud)

要为方法使用相同的连接,请检查cacheConnection