无法在slickdb中找出过滤器

时间:2018-01-22 05:19:07

标签: scala slick-3.0

将scala与slickdb一起使用。我有一张叫做人的桌子。我正按名称筛选出人员,如下所示

table.Persons.filter({ row => {
  println("inside filter")
  req.personName.map(name => row.personName === name).getOrElse(true:Rep[Boolean]) 
})

该表包含3行。但是println()仍然只执行一次。这个过滤器是如何工作的?

1 个答案:

答案 0 :(得分:0)

首先写一些像

这样的东西
personTable.filter(p => { .... })

它将自我评估为Query,它可以在实际数据库查询需要时生成SQL查询。生成的SQL将类似于

SELECT ...
FROM persons
WHERE ...

现在将此SQL查询提交给数据库以供执行。

因此,您对{ ... }内的代码进行评估以生成查询本身。它与数据库表中的行数无关。

因此,即使您的数据库表有0行,1行或100万行,示例中的println也只会运行一次。