【问题标题】:connection pooling and prepared statements with groovy.sql.Sql or JDBC in Grails在 Grails 中使用 groovy.sql.Sql 或 JDBC 进行连接池和准备好的语句
【发布时间】:2012-09-06 01:49:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql grails jdbc groovy


    【解决方案1】:

    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
    

    【讨论】:

    • 您能否给出 1 个完整的 cacheStatements 示例,用于从数据库中获取行。实际上我需要使用查询缓存来获取大量数据。
    【解决方案2】:

    如果您的数据源配置为使用连接池,则 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-23
      • 2011-08-30
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多