0

可能重复:
是否有一种简单的方法可以将 Stream 作为 RowParser 的输出?

当我在 Play 中使用 Anorm 时有这样的声明时!框架:

def all(): List[Note] = 
    DB.withConnection { implicit c => SQL("select * from note").as(note *) }

它似乎返回了我的模型对象的列表。我可以以不同的方式执行此操作,以便我可以获取 Stream[Note] 以便它“延迟”加载行吗?或者,即使它声称要返回一个列表,它也可能已经以某种方式存在。

换句话说,如果我做 all().head 我希望它只获取第一行。在我看来,在“as”之前它以流的形式开始,但在“as”之后它是一个列表。

4

2 回答 2

2

我昨天问了一个非常相似的问题,所以你可能想检查一下。我为你的问题提供了一个解决方案,但我的问题是关于有一个更优雅/简洁的方式来实现同样的目标。

如果您生成 a List,则没有什么懒惰的,您的整个结果都会被解析并返回。但是,即使您使用 a Stream,出于性能原因,您也应该尝试减少查询中已经存在的行数。例如,如果您只对前 n 行感兴趣,则应该添加limit n,否则仍然会查询数据库中的所有行,并且使用Stream而不是解析时,您将节省一点时间List

于 2012-11-08T13:48:00.907 回答
-1

Check this link http://www.playframework.org/documentation/2.0/ScalaAnorm

You can use the apply() method instead of the as() to get the Stream but then you will have to parse the Note yourself.

于 2012-11-08T11:56:55.187 回答