4

这是我在 slick 中以纯 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-ish。

4

1 回答 1

3

您可以像 Medina 在邮件列表中指出的那样使用 SetParameter(我问了一个类似的问题):

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 回答