我使用字符串插值和光滑来生成sql请求。
当参数少于22时,光滑字符串插值工作正常。
示例:
val s = sql"select * from my_table where my_table.id = $i"
但是,当光滑使用元组和自动元组时,我无法编写超过23个参数的查询。
示例:
val s = sql"""select * from my_table
where a1 = $i1 and a2 = $i2 and .... and a23 = $i23"""
目前我唯一的解决方案就是为超过23个参数的每个查询创建一个新的自定义字符串插值。
示例:
case class A(q1: Q1, q2: q2, ..., qn: Qn)
implicit class CustomSQLInterpolation(val s: StringContext) extends AnyVal {
/** Build a SQLInterpolationResult via string interpolation */
def csql[P](q1: Q1, q2: Q2, ..., qn: Qn) = {
val a = A(q1, q2, ..., qn)
val setTupleA = new SetTupleParameter[A](
SetQ1, SetQ2, ..., SetQ3)
new SQLInterpolationResult[A](s.parts, a, setTupleA)
}
}
但这种方法并不通用,使用起来也不方便。