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

use*_*116 3 mysql playframework ebean

嘿伙计们,我有使用Play Framework的问题.我正在尝试显示大量数据(来自此数据库).当我使用"find.all()"时,Play Framework Server崩溃,因为它占用了大量内存.

我有一个名为的DB模型:

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

我试图将all()查询限制为50(最好是每页).但我似乎无法弄明白.我想我需要一个List返回显示在网页上.但我无法让它发挥作用.如果你们中的一个(和女孩)可以帮助我解决这个问题,我会真的很放心.我用"fetch"和"setMaxRows()"尝试过它,但我只能得到我似乎无法解决的错误.如果有不清楚的地方,请问我,我会尽量提供尽可能多的信息.谢谢.

mgu*_*min 8

使用setMaxRows()应该工作.试试这个:

dblp_pub_new.find.setMaxRows(50).findList()
Run Code Online (Sandbox Code Playgroud)

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


Car*_*ten 5

Ebean有助于简化数据分页.它被称为PagingList那里.Play的Ebeans Finder助手类允许您获得这样的PagingList查询.

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

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

此外,请注意您的班级名称dblp_pub_new非常不寻常.有关更多信息,请参阅此问题.