繁体   English   中英

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

[英]How to limit the MySQL Query with Ebean in Play Framework

嘿伙计们,我在使用 Play Framework 时遇到了问题。 我正在尝试显示大量数据(来自此数据库)。 当我使用“find.all()”时,Play Framework Server 崩溃了,因为它需要很多内存。

我有一个名为的数据库模型:

@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);

}

我的渲染函数是,它包含在 Application.java 中:

public static Result dois(){
    return ok(views.html.index.render(dblp_pub_new.all(), DoiForm));
}

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

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

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

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

Ebean有助于简化数据分页。 它在那里被称为PagingList 用于Ebeans的Play的Finder助手类 允许您为查询获取此类PagingList

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

public static List<dblp_pub_new> getpageItems(int page) {
    int pageSize = 50;
    return find.findPagingList(pageSize).getPage(page).getList();
}

另请注意,您的类名dblp_pub_new非常不寻常。 有关更多信息,请参阅此问题

除了Carsten的回答,我只提到Page本身包含几个有用的方法,这些方法有助于在视图中构建分页菜单,因此使用整个Page对象更容易:

public static com.avaje.ebean.Page<dblp_pub_new> getPage(int pageSize, int page) {
    return find.findPagingList(pageSize).getPage(page);
}

然后你可以在视图中使用它:

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

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

当前接受的答案表明findPagingList不再有效。 https://github.com/ebean-orm/ebean/issues/96

现在使用setMaxRows()应该适用于任何Query但您必须在其上使用findPagedList (与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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM