簡體   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