2014-01-10 36 views

回答

1

我終於解決了實現一個特設 Java庫:數據表分頁

這裏你可以找到我的項目jar https://bitbucket.org/davioooh/datatablepager/


更新(2016年9月1日):我最近更新了我的項目,以支持也v 1.10。X


更新(2017年5月26日):我搬到項目回購協議GitHub

+0

我下載了jar並附加到我的項目中;現在如何使用它? – pheromix

+1

@pheromix我添加了一些額外的文檔到我的項目庫。看一看!謝謝。 – davioooh

1

有一個簡單的方法使用JPA進行分頁。如果你看看javax.persistence.Queryinterface,你會發現它有setFirstResult()setMaxResult()方法。組合使用它可以讓您檢索查詢的分頁結果。

一些代碼來說明:

Query q = entityManager.createQuery("select f from Foo"); 
q.setFirstResult(10).setMaxResults(10); 
List<Foo> foos = q.getResultList(); 

這將會從開始的10日結果查詢10個結果。

對於排序你有兩種方法。您可以更改依賴於該領域的查詢需要進行排序例如

entityManager.createQuery("select f from Foo order by f.field1 asc").setFirstResult(10).setMaxResults(10).getResultList(); 

entityManager.createQuery("select f from Foo order by f.field2 asc").setFirstResult(10).setMaxResults(10).getResultList(); 

另外,您可以看看javax.persistence.CriteriaQuery API,它可能使事情多一點維護:

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
CriteriaQuery<Foo> query = cb.createQuery(Foo.class); 
Root<Foo> root = query.from(Foo.class); 
query.select(root).orderBy(cb.asc(root.get("theFieldToOrderBy"))); 
entityManager.createQuery(query).setFirstResult(10).setMaxResults(10).getResultList(); 

搜索有點困難。沒有一種原生的方式可以使用JPA在實體的所有字段中進行搜索。你可能需要看看Hibernate Search這樣的東西來幫助你。它應該相當乾淨地與JPA API集成,假設你使用Hibernate作爲你選擇的持久性提供者。

+0

好的,但我也需要搜索和排序... – davioooh

+0

已更新,以反映您的其他要求。 –

+0

+1這並不完全回答我的問題,但是是一個很好的建議。謝謝。 – davioooh

0

最近建立了一個名爲JED的類庫,可能會幫助您解決分頁問題。儘管JED不涉及JPA,但它確實對DataTable執行了所有CRUD操作(創建,讀取,更新,刪除)操作。它還可以配置爲執行服務器端處理,包括排序,搜索和分頁。服務器端處理通常是在您有非常大的數據集(如50K記錄或更多)時完成的,否則,DataTables會在客戶端完成所有這些操作。

看到所示的例子:http://jed-datatables.net/examples/basicssp.jsp

相關問題