Closed. This question needs to be more focused 。它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注editing this post一个问题。
7年前关闭。
Improve this question
我对 slick 及其 TableQueries 有点失望:例如,应用程序的模型可以是“类 Persons(tag: Tag) extends Table[Person](其中 Person 是具有一些字段的案例类,如姓名、年龄、地址……)。
奇怪的一点是“val people = TableQuery[Persons]”包含所有记录。
例如,要拥有所有成年人,我们可以使用:
数据库的内容是否加载到变量persons中?
是否有相反的机制允许评估不是“人”而是“成人”?(一种惰性变量)?
我们可以说“在任何时候,“人员”都包含整个数据库吗?
是否有好的做法,一些可以帮助开发人员的重要想法?
谢谢。
您实质上已经创建了一个SQL查询,您可以将其视为
然后,当您调用
至于好的实践和重要的想法,我建议您通读他们的文档,并查看您感兴趣的任何类的 scaladocs。
http://slick.typesafe.com/docs/
想改善这个问题吗?更新问题,使其仅关注editing this post一个问题。
7年前关闭。
Improve this question
我对 slick 及其 TableQueries 有点失望:例如,应用程序的模型可以是“类 Persons(tag: Tag) extends Table[Person](其中 Person 是具有一些字段的案例类,如姓名、年龄、地址……)。
奇怪的一点是“val people = TableQuery[Persons]”包含所有记录。
例如,要拥有所有成年人,我们可以使用:
adults = persons.filter(p => p.age >= 18).list()
数据库的内容是否加载到变量persons中?
是否有相反的机制允许评估不是“人”而是“成人”?(一种惰性变量)?
我们可以说“在任何时候,“人员”都包含整个数据库吗?
是否有好的做法,一些可以帮助开发人员的重要想法?
谢谢。
最佳答案
您认为 persons
包含所有记录是错误的。 Table
和 TableQuery
类是 SQL
表的表示,该库的重点是通过提供方便的、类似于 Scala 的语法来简化与 SQL 数据库的交互。
当你说
val adults = persons.filter{ p => p.age >= 18 }
您实质上已经创建了一个SQL查询,您可以将其视为
SELECT * FROM PERSONS WHERE AGE >= 18
然后,当您调用
.list()
时,它会执行该查询,将数据库中的结果行转换回 Person
案例类的实例。大多数与 slick 的 Table 或 Query 类有关的方法将专注于生成查询(即“选择”语句)。在您调用它们之前,它们实际上不会加载任何数据(例如,通过调用 .list()
或 .foreach
)。至于好的实践和重要的想法,我建议您通读他们的文档,并查看您感兴趣的任何类的 scaladocs。
http://slick.typesafe.com/docs/