2017-08-19 48 views
0

用油滑2的普通SQL查詢,我發現自己寫了相當數量的:避免在Slick 2的普通SQL中使用Boilerplate?

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的Plain SQL做得更好嗎?

回答