如何在Play框架中使用Ebean限制MySQL查询

如何在Play框架中使用Ebean限制MySQL查询,mysql,playframework,ebean,Mysql,Playframework,Ebean,嘿,伙计们, 我在使用Play框架时遇到问题。 我试图显示大量数据(来自此数据库)。当我使用“find.all()”时,Play Framework服务器崩溃,因为它占用了大量内存 我得到了一个名为: @Entity public class dblp_pub_new extends Model { [...] public dblp_pub_new() {} public static List<dblp_pub_new> all() { retu

嘿,伙计们, 我在使用Play框架时遇到问题。 我试图显示大量数据(来自此数据库)。当我使用“find.all()”时,Play Framework服务器崩溃,因为它占用了大量内存

我得到了一个名为:

@Entity
public class dblp_pub_new extends Model {
[...]
    public dblp_pub_new() {}

    public static List<dblp_pub_new> all() {
        return find.all();
    }

    public String getDoi() {
        return doi;
    }

    public void setMdate() {
        this.mdate = new Date();
    }

    public static Finder<String,dblp_pub_new> find = new Finder<String, dblp_pub_new>(String.class, dblp_pub_new.class);

}
我试图将all()查询限制为50(最好是每页)。但我似乎无法理解。我想我需要一个列表返回显示在网页上。但我不能让它工作。 如果你们中的一个能帮我解决这个问题,我真的会松一口气。 我已经用“fetch”和“setMaxRows()”尝试过了,但我只得到了似乎无法解决的错误。 如果有什么不清楚的地方,请尽管问,我会尽力提供尽可能多的信息。 谢谢。

使用
setMaxRows()
应该可以。试试这个:

dblp_pub_new.find.setMaxRows(50).findList()

顺便说一下,您应该根据Java约定命名类:
DblpPubNew
。这将使您的代码更易于阅读。

Ebean提供了一个帮助程序,使数据分页更容易。那里叫a。这出戏是给埃比安人的

假设您希望每页显示50个项目,并希望检索第一页的项目。然后你会写这样的东西

public static List<dblp_pub_new> getpageItems(int page) {
    int pageSize = 50;
    return find.findPagingList(pageSize).getPage(page).getList();
}
公共静态列表getpageItems(int页){
int pageSize=50;
返回find.findPagingList(pageSize).getPage(page.getList();
}

另外,请注意,您的类名
dblp\u pub\u new
非常不寻常。有关更多信息,请参阅。

除了卡斯滕的回答之外,我只提到它本身包含一些有用的方法,可以帮助您在视图中构建分页菜单,从而更容易使用整个页面对象:

public static com.avaje.ebean.Page<dblp_pub_new> getPage(int pageSize, int page) {
    return find.findPagingList(pageSize).getPage(page);
}
public static com.avaje.ebean.Page getPage(int pageSize,int Page){
返回find.findPagingList(pageSize).getPage(page);
}
然后您可以在视图中使用它,如:

<ul>
  @for(item <- myPage.getList){
    <li>@item.name</li>
  }
</ul>

<b>Total page count is: @myPage.getTotalPageCount()</b>

    @对于(项目当前接受的建议
    findPagingList
    的答案不再有效。请参阅

    现在使用
    setMaxRows()
    应该可以处理任何
    查询
    ,但您必须使用
    findPagedList
    (vs.
    findPagingList
    )。类似于这样:

    List<dblp_pub_new> list = dblp_pub_new.find.query()
       .where().eq("some_column", some_value)
       .orderBy("some_column desc")
       .setMaxRows(50)
       .findPagedList()
       .findList()
    
    List List=dblp\u pub\u new.find.query()
    .where().eq(“某些列”,某些值)
    .orderBy(“某些列描述”)
    .setMaxRows(50)
    .findPagedList()
    .findList()
    
    非常感谢。这完全解决了这个问题。如此有效,但又如此简单。我不知道我怎么看不到这个解决方案。我希望其他一切都能正常工作;)截至2017年7月,Finder中没有findPagingList方法,最接近的findPagedList方法无法设置页面大小。我还没有尝试过这个方法,但我会密切关注的。我无法根据Java约定命名我的类,因为这个数据库已经启动并运行(不是在我的“领导”下),我只是想访问它。但无论如何,也谢谢你的帮助
    setMaxRows
    不适用于
    findPagingList
    。为什么?页面是否已加载?我不这么认为。。!?您是否尝试过使用query.setFirstRow((值));?
    List<dblp_pub_new> list = dblp_pub_new.find.query()
       .where().eq("some_column", some_value)
       .orderBy("some_column desc")
       .setMaxRows(50)
       .findPagedList()
       .findList()