Slick中的inSet和inSetBind有啥区别
Posted
技术标签:
【中文标题】Slick中的inSet和inSetBind有啥区别【英文标题】: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 源代码对人类生命非常不利。 case in point 【参考方案1】:inSet
是inSetBind
的不安全版本,它根据传入的输入生成安全/转义的 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 的绑定方法来确保您拥有安全、高性能的查询——简单;-)以上是关于Slick中的inSet和inSetBind有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
::before 伪类影响 react-slick 中的箭头