【问题标题】:JQuery DataTables server-side pagination, sorting, search with Spring MVC + JPA使用 Spring MVC + JPA 进行 JQuery DataTables 服务器端分页、排序、搜索
【发布时间】:2014-01-29 15:15:30
【问题描述】:

我正在将一个旧的 .NET Web 应用程序移植到 Java + Spring MVC + JPA。

又出现了一个老问题。在这个问题JQuery DataTables server-side pagination 我正在寻找一个.NET 解决方案。最后我找到了。

现在我需要知道 Java 应用程序是否存在类似的东西。我用谷歌搜索了一下,但我没有找到真正完整的东西......

【问题讨论】:

标签: java spring-mvc jpa datatables


【解决方案1】:

我终于解决了实现一个 ad hoc Java 库:DataTables Pagination

在这里你可以找到我的项目jarhttps://bitbucket.org/davioooh/datatablepager/


更新(2016 年 9 月 1 日):我最近更新了我的项目以支持 v 1.10.x


更新(2017 年 5 月 26 日):我将项目 repo 移至 GitHub

【讨论】:

【解决方案2】:

有一种使用 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 之类的内容来帮助您。假设您使用 Hibernate 作为您选择的持久性提供程序,它应该与 JPA API 相当干净地集成。

【讨论】:

    【解决方案3】:

    最近构建了一个名为 JED 的类库,它可能会帮助您解决分页问题。尽管 JED 不涉及 JPA,但它确实为 DataTables 执行所有 CRUD(创建、读取、更新、删除)操作。它还可以配置为执行服务器端处理,包括排序、搜索和分页。服务器端处理通常在您拥有超大数据集(如 50K 或更多记录)时完成,否则,DataTables 会在客户端自行完成所有这些工作。

    查看示例:http://jed-datatables.net/examples/basicssp.jsp

    【讨论】:

      猜你喜欢
      • 2021-04-25
      • 2012-07-18
      • 1970-01-01
      • 2023-02-13
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多