加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – anorm中的“In”子句?

发布时间:2020-12-16 09:45:28 所属栏目:安全 来源:网络整理
导读:在anorm中使用“in”子句似乎没有简单的方法: val ids = List("111","222","333")val users = SQL("select * from users where id in ({ids})").on('ids- ???).as(parser *) 如何取代???部分? 我试过了: on('ids - ids)on('ids - ids.mkString("'","','",
在anorm中使用“in”子句似乎没有简单的方法:

val ids = List("111","222","333")
val users = SQL("select * from users where id in ({ids})").on('ids-> ???).as(parser *)

如何取代???部分?

我试过了:

on('ids -> ids)
on('ids -> ids.mkString("'","','","'"))
on('ids -> ids.mkString("','")

但无效。

我在讨论中看到完全一样的问题:https://groups.google.com/d/topic/play-framework/qls6dhhdayc/discussion,作者有一个复杂的解决方案:

val params = List(1,2,3) 

val paramsList = for ( i <- 0 until params.size ) yield ("userId" + i) 

// ---> results in List("userId0","userId1","userId2") 

User.find("id in ({%s})"

    // produces "id in ({userId0},{userId1},{userId2})"
    .format(paramsList.mkString("},{")) 

    // produces Map("userId0" -> 1,"userId1" -> 2,...) 
    .on(paramsList.zip(params))
    .list()

这太复杂了。

有什么更容易的方法吗?还是应该玩提供一些东西来使它更容易?

解决方法

Anorm现在支持自2.3: “Using multi-value parameter”以来的这种情况(和更多)

回到最初的例子:

val ids = Seq("111","333")
val users = SQL("select * from users where id in ({ids})").on('ids-> ids).as(parser *)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读