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

scala – 具有动态条件的Slick Plain SQL查询

发布时间:2020-12-16 08:56:33 所属栏目:安全 来源:网络整理
导读:我正在努力为我的查询添加其他条件.在最简单的形式,我需要的是如下所示: def findPeople(name: String,maybeSurname: Option[String]) = { val sql1 = sql"select * from my_table where name = $name" val sql2 = maybeSurname.map( surname = sql"and col
我正在努力为我的查询添加其他条件.在最简单的形式,我需要的是如下所示:

def findPeople(name: String,maybeSurname: Option[String]) = {
   val sql1 = sql"select * from my_table where name = $name"
   val sql2 = maybeSurname.map( surname => sql"and col2 = $surname" ).getOrElse(sql"")
   val finalSql = sql1 + sql2 // I need this kind of feature
   ...
   ...
}

使用#$可能是一个选项,但是姓氏不会是绑定变量,这是一个大问题.

解决方法

这是一个关于光滑3.1.x的示例测试

import slick.jdbc.{SQLActionBuilder,SetParameter,PositionedParameters}

object SlickKit {

  implicit class SQLActionBuilderConcat (a: SQLActionBuilder) {
    def concat (b: SQLActionBuilder): SQLActionBuilder = {
      SQLActionBuilder(a.queryParts ++ b.queryParts,new SetParameter[Unit] {
        def apply(p: Unit,pp: PositionedParameters): Unit = {
          a.unitPConv.apply(p,pp)
          b.unitPConv.apply(p,pp)
        }
      })
    }
  }
}

然后

import SlickKit._
val sql1 =
  sql"""
   select count(*) from idinfo_#$i
    """

val sql2 =
  sql"""
       where source=$source
    """

val sql = sql1 concat sql2

sql.as[Int].head

(编辑:李大同)

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

    推荐文章
      热点阅读