【问题标题】:What is the difference between inSet and inSetBind in SlickSlick中的inSet和inSetBind有什么区别
【发布时间】:2014-12-22 03:32:29
【问题描述】:

ScalaDoc of the functions尚未填写。

我知道这些方法用于模仿 SQL 的 IN 关键字(例如,SELECT * FROM table WHERE id IN VALUES(1, 42, 101) 可以用 table.filter(_.id inSet Seq(1, 42, 101)) 完成)。我不知道这个“绑定”版本是什么或如何选择我应该使用的。

【问题讨论】:

  • @BobDalgleish Slick 源代码对人类生命非常不利。

标签: scala slick


【解决方案1】:

inSetinSetBind 的不安全版本,它根据传入的输入生成安全/转义的 sql 值。在您手动设置值的示例中,两种类型的绑定同样安全。

通常使用绑定参数可以获得性能提升(通过生成的准备好的语句),但对于集合值则不然。详情请见here

【讨论】:

  • 我不明白其中的区别。你能解释一下吗?我尝试使用 slick 中的查询。发现如果我使用 inSet(List(1,2,3)) 查询将构建为 where id in (1,2,3)。如果我使用 inSetBind(List(1,2,3)),则查询变为 id in (?,?,?)。
  • @YaduKrishnan 后者是上面提到的占位符语法,每个 ?替换为安全/转义值。
  • 你所说的“安全/转义”值是什么意思?可以举个例子吗?
  • @YaduKrishnan 查找 sql 注入攻击、jdbc 准备好的语句等。底线只是使用 Slick 的绑定方法来确保您拥有安全、高性能的查询——简单;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
  • 2012-03-14
  • 2012-02-06
相关资源
最近更新 更多