优化数据库操作 Slick 3

Optimize database actions Slick 3

我用 Slick 创建了一个数据库。我正在尝试创建表的模式,select 一些信息等等。这是我的模式创建代码:

val createUserTable = UserTable.table.schema.create
val createTaskTable = TaskTable.table.schema.create
Await.result(db.run(DBIO.seq(Queries.createUserTable, Queries.createTaskTable)), 2 seconds)

这段代码工作得很好,但我不想在每个查询中都使用 Await.result。我正在寻找的是至少按目的(创建、selection 等)批量执行它们。我可以创建此方法来传递不同的操作:

def executeAction[T](action: DBIO[T]) =
    Await.result(db.run(action), 2 seconds)

所以我很好奇如何更改它以传递一些包含一系列查询的数据结构?例如,List(createUserTable, createTaskTable)

感谢您的帮助!

避免等待每个 DBIO 操作的两种方法

  1. 创建 DBIO 操作列表并使用 DBIO.seq 收集它们并执行。

  2. 使用for-comprehension将所有DBIO action组合成一个DBIO action

这将帮助您反复使用 await 来等待中间 DBIO 操作的结果。

在这两种情况下,您必须至少使用 Await.result 在主线程中等待结果(即停止主线程退出)一次。