scala – Slick 3.0如何更新变量列列表,该数字仅在运行时知道
发布时间:2020-12-16 18:49:08 所属栏目:安全 来源:网络整理
导读:是否可以更新变量列列表,这个数字仅在运行时通过光滑3.0知道? 下面是我想做的例子(不会编译) var q: Query[UserTable,UserTable#TableElementType,Seq] = userTablevar columns = List[Any]()var values = List[Any]()if (updateCommands.name.isDefined) {
是否可以更新变量列列表,这个数字仅在运行时通过光滑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): _*)) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |