我正在將舊的.NET Web應用程序移植到Java + Spring MVC + JPA。JQuery DataTables服務器端分頁,排序,使用Spring MVC + JPA搜索
而且一個老問題再次浮出水面。在這個問題JQuery DataTables server-side pagination我正在尋找一個.NET解決方案。最後我找到了它。
現在我需要知道Java應用程序是否存在類似的東西。我GOOGLE了一下,但我沒有發現任何真正完整的...
我正在將舊的.NET Web應用程序移植到Java + Spring MVC + JPA。JQuery DataTables服務器端分頁,排序,使用Spring MVC + JPA搜索
而且一個老問題再次浮出水面。在這個問題JQuery DataTables server-side pagination我正在尋找一個.NET解決方案。最後我找到了它。
現在我需要知道Java應用程序是否存在類似的東西。我GOOGLE了一下,但我沒有發現任何真正完整的...
我終於解決了實現一個特設 Java庫:數據表分頁。
這裏你可以找到我的項目jar
:
https://bitbucket.org/davioooh/datatablepager/
更新(2016年9月1日):我最近更新了我的項目,以支持也v 1.10。X
更新(2017年5月26日):我搬到項目回購協議GitHub。
有一個簡單的方法使用JPA進行分頁。如果你看看javax.persistence.Query
interface,你會發現它有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作爲你選擇的持久性提供者。
最近建立了一個名爲JED的類庫,可能會幫助您解決分頁問題。儘管JED不涉及JPA,但它確實對DataTable執行了所有CRUD操作(創建,讀取,更新,刪除)操作。它還可以配置爲執行服務器端處理,包括排序,搜索和分頁。服務器端處理通常是在您有非常大的數據集(如50K記錄或更多)時完成的,否則,DataTables會在客戶端完成所有這些操作。
我下載了jar並附加到我的項目中;現在如何使用它? – pheromix
@pheromix我添加了一些額外的文檔到我的項目庫。看一看!謝謝。 – davioooh