为slick.session.Database导出包装器

时间:2013-09-10 12:50:55

标签: database scala export wrapper

我有很多格式的查询 db withSession{ implicit session : Session => Q.update[String](query).execute(id)} 我希望以更简单的方式编写它:db.execute(query, id)。所以,我在同一文件/包中定义了包装器,我在其中初始化了db。如何导出包装器以便以这种方式使用它?现在,我遇到问题value execute is not a member of scala.slick.session.Database

注意:查询和id是字符串。我使用普通的sql
db是一个已经初始化的数据库:

object SQLUtilities{  
  lazy val db = init() 
  private def init() = {Database.forURL("jdbc:postgresql://localhost", driver = "org.postgresql.Driver")}  

  def execute(query: String, id: String){  
    db withSession{ //implicit session : Session =>  
        Q.update[String](query).execute(id)
    }
  } 
}    

导入import scala.slick.jdbc.{GetResult, StaticQuery => Q}; import scala.slick.session.{Session, Database}等标准软件包

1 个答案:

答案 0 :(得分:1)

听起来你可能正在寻找隐含的。如果是这样,您可能希望重新定义SQLUtilities,如下所示:

object SQLUtilities{  
  lazy val db = init() 
  private def init() = {Database.forURL("jdbc:postgresql://localhost", driver = "org.postgresql.Driver")}  

  implicit class PimpedDB(val database:Database) extends AnyVal{
    def execute(query: String, id: String){  
      database withSession{ implicit session : Session =>  
          Q.update[String](query).execute(id)
      }
    }    
  }
}

然后,如果您只是将SQLUtilities._导入到您希望应用此拉皮条的任何位置,您就可以访问execute实例上的Database函数。

如果这不是你想要的,我会事先道歉。