[英]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.