Slick 3.0如何更新变量列列表,哪个数字只有在运行时才知道

2023-12-19

是否可以更新变量列列表,其中的数字仅在运行时由 slick 3.0 知道?

下面是我想要做的示例(不会编译)

var q: Query[UserTable, UserTable#TableElementType, Seq] = userTable
var columns = List[Any]()
var values = List[Any]()

if (updateCommands.name.isDefined) {
  columns = q.name :: columns
  values = updateCommands.name.get :: values
}

if (updateCommands.surname.isDefined) {
  columns = q.surname :: columns
  values = updateCommands.surname.get :: values
}
q = q.filter(_.id === updateCommands.id).map(columns).update(values)

这是我在 Slick 3.1 中所做的。我不知道编辑普通 SQL 语句或多个查询更糟糕。所以我决定选择后者,假设 Postgres 优化器会看到相同的结果WHERE单个事务的更新查询中的子句。我的更新方法如下所示

def updateUser(user: User, obj: UserUpdate): Future[Unit] = {

  val actions = mutable.ArrayBuffer[DBIOAction[Int, NoStream, Write with Transactional]]()
  val query = users.withFilter(_.id === user.id)

  obj.name.foreach(v => actions += query.map(_.name).update(v))
  obj.email.foreach(v => actions += query.map(_.email).update(Option(v)))
  obj.password.foreach(v => actions += query.map(_.pwdHash).update(Option(encryptPassword(v))))

  slickDb.run(DBIO.seq(actions.map(_.transactionally): _*))
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Slick 3.0如何更新变量列列表,哪个数字只有在运行时才知道 的相关文章

随机推荐