可能重复:
Is there an easy way to get a Stream as output of a RowParser?
当我在Play中使用Anorm时有这样的声明!框架:
def all(): List[Note] =
DB.withConnection { implicit c => SQL("select * from note").as(note *) }
它似乎返回了我的模型对象列表。我可以这样做不同,所以我可以得到一个流[注意],所以它做“懒”加载行?或者它可能已经以某种方式,即使它声称要返回一个List。
换句话说,如果我做所有()。头,我希望它只获取第一行。在我看来,在“as”之前它以流形式开始,但在“as”之后它是一个List。
答案 0 :(得分:2)
我昨天问了a very similar question,所以你可能想要检查一下。我给出了一个问题的解决方案,但我的问题是有一个更优雅/简洁的方法来实现同样的目标。
如果你生成一个List
,就没有什么懒惰的,你的整个结果都会被解析并返回。但是,即使您使用Stream
,出于性能原因,您也应该尝试减少查询中已存在的行数。例如,如果您只对前n行感兴趣,则应添加limit n
,否则仍将查询所有行的数据库,并且在使用{{{{}}时,您只需节省一点时间即可解析它们。 1}}而不是Stream
。
答案 1 :(得分:-1)
点击此链接http://www.playframework.org/documentation/2.0/ScalaAnorm
您可以使用apply()
方法代替as()
获取流,但是您必须自己解析注释。