4

これは、平易な SQL でバッチ挿入をスムーズに行う私の方法ですが、これはちょっと面倒です。

db withSession {
  (Q.u + "insert into customer (id, name, address) values " +
    users.map(toSql).mkString(",")).execute()
}

def toSql(user: User): String = "(%d, '%s', '%s')".format(user.id, user.name, user.address)

プレーン SQL で滑らかにバッチ挿入/更新を行うためのより良い方法はあるのでしょうか? 私は持ち上げられたまたは直接の埋め込みの大ファンではありません.Hibernateのように思えます.

4

1 に答える 1

3

You can use SetParameter as Medina pointed out in the mailinglist (I asked a similar question):

import slick.jdbc.SetParameter
import slick.jdbc.PositionedParameters 

val params = Seq("foo", "bar", "baz")
implicit object SetSqlParamList extends SetParameter[Seq[String]] {
  override def apply(values: Seq[String], pp: PositionedParameters): Unit = values.foreach(v => pp.setString(v))
}

StaticQuery.query[List[String], User](
  s"""SELECT * FROM foo WHERE bar IN (${params.map(_ => "?").mkString(",")})"""
).list(params)

https://groups.google.com/d/msgid/scalaquery/cd028e33-42e8-4a26-85fc-e3b1b700e1f6%40googlegroups.com?utm_medium=email&utm_source=footer

于 2014-07-03T22:09:51.950 に答える