如何使用alpakka光滑连接器将case对象插入mysql

时间:2017-11-28 16:42:13

标签: scala akka slick alpakka

我正在编写一些代码来将数据插入MySQL。我决定使用Alpakka Slick Connector。使用该示例:https://developer.lightbend.com/docs/alpakka/latest/slick.html#using-a-slick-flow-or-sink我已成功将数据添加到DB,但它要求我将带有SQL命令的字符串传递给Sink。由于我有案例对象的集合,我需要从该对象构建命令。我可以添加方法来为case类生成INSERT,UPDATE和DELETE命令,但也许有一些更好的方法来添加整个对象集合而不用SQL包装数据。

1 个答案:

答案 0 :(得分:2)

使用"普通SQL"的替代方法是使用"打字"插入。以下是使用Slick.sink改编自SlickSpec的示例:

case class User(id: Int, name: String)
class Users(tag: Tag) extends Table[(Int, String)](tag, "USERS") {
  def id = column[Int]("ID")
  def name = column[String]("NAME")
  def * = (id, name)
}

val typedUsers = TableQuery[Users]

def insertUser(user: User): DBIO[Int] = typedUsers += user

val users = (1 to 40).map(i => User(i, s"Name$i")).toSet

Source(users)
  .runWith(Slick.sink(parallelism = 4, insertUser))

上面的代码插入了40个用户(使用User案例类实例的集合),并行设置为4。