如何使用 alpakka slick 连接器将案例对象插入 mysql
How to insert case objects to mysql with alpakka slick connector
我正在编写一些代码以将数据插入 MySQL。我决定使用 Alpakka Slick Connector。使用该示例: https://developer.lightbend.com/docs/alpakka/latest/slick.html#using-a-slick-flow-or-sink 我已成功将数据添加到数据库,但它需要我将带有 SQL 命令的字符串传递给 Sink。因为我有案例对象的集合,所以我需要从这些对象构建命令。我可以添加方法来生成 INSERT、UPDATE 和 DELETE 命令到 case 类 但也许有一些更好的方法来添加整个对象集合而不用 SQL.
包装数据
使用 "plain SQL" 的替代方法是使用 "typed" 插入。这是一个使用 Slick.sink
that is adapted from 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
个案例 class 个实例的集合),并行度设置为 4。
我正在编写一些代码以将数据插入 MySQL。我决定使用 Alpakka Slick Connector。使用该示例: https://developer.lightbend.com/docs/alpakka/latest/slick.html#using-a-slick-flow-or-sink 我已成功将数据添加到数据库,但它需要我将带有 SQL 命令的字符串传递给 Sink。因为我有案例对象的集合,所以我需要从这些对象构建命令。我可以添加方法来生成 INSERT、UPDATE 和 DELETE 命令到 case 类 但也许有一些更好的方法来添加整个对象集合而不用 SQL.
包装数据使用 "plain SQL" 的替代方法是使用 "typed" 插入。这是一个使用 Slick.sink
that is adapted from 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
个案例 class 个实例的集合),并行度设置为 4。