在Slick 2的纯SQL中避免使用Boilerplate?

时间:2017-08-19 14:03:31

标签: scala slick

使用Slick 2的纯SQL查询,我发现自己编写了相当多的内容:

import slick.driver.H2Driver.api._

def f(search: Option[String]) = search match {
  case Some(s) =>   sql""" SELECT a FROM foo WHERE s = $s"""
  case None    =>   sql""" SELECT a FROM foo"""
}

过去,我已经使用String来尝试SQL重用:

def g(search: Option[String]) = {

  val query: String =   search match {
    case Some(s) =>   s"WHERE s = '$s'"
    case None     =>  ""
 }

 sql""" SELECT a FROM foo #$query"""
}

忽略SQL注入风险,我不喜欢第二种方法,因为我发现它更难阅读,即我必须跟踪String而不是查看整个查询。

但是,这两种方法对我来说都很有趣。如果我可以构建基本查询,然后编写或添加它以添加WHERE,这似乎是理想的。

我可以使用Slick 2的纯SQL做得更好吗?

1 个答案:

答案 0 :(得分:0)

Slick v2并没有准备就绪,并且在性能和查询创建方面存在很多问题。

最新版本的光滑(3.2.1)中已经完成了所有这些工作: http://slick.lightbend.com/doc/3.2.1/introduction.html#plain-sql-support

您还可以让光滑的内部为您生成SQL并使用Slick基于Scala的查询API开始制定查询:http://slick.lightbend.com/doc/3.2.1/queries.html