在播放中使用Anrom时,我可以从“as”获得结果流!框架?

时间:2012-11-07 22:10:12

标签: scala playframework playframework-2.0 scala-collections anorm

  

可能重复:
  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。

2 个答案:

答案 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()获取流,但是您必须自己解析注释。