将scala与slickdb一起使用。我有一张叫做人的桌子。我正按名称筛选出人员,如下所示
table.Persons.filter({ row => {
println("inside filter")
req.personName.map(name => row.personName === name).getOrElse(true:Rep[Boolean])
})
该表包含3行。但是println()
仍然只执行一次。这个过滤器是如何工作的?
答案 0 :(得分:0)
首先写一些像
这样的东西personTable.filter(p => { .... })
它将自我评估为Query
,它可以在实际数据库查询需要时生成SQL查询。生成的SQL将类似于
SELECT ...
FROM persons
WHERE ...
现在将此SQL查询提交给数据库以供执行。
因此,您对{ ... }
内的代码进行评估以生成查询本身。它与数据库表中的行数无关。
因此,即使您的数据库表有0行,1行或100万行,示例中的println
也只会运行一次。