Java 由数据库支持的大型JSF数据表,可处理分页/排序

Java 由数据库支持的大型JSF数据表,可处理分页/排序,java,performance,jsf,datatable,pagination,Java,Performance,Jsf,Datatable,Pagination,如果有大量的表格数据,我将尝试在JSF数据表中显示这些数据。是否有任何实现或组件可以处理数据库分页和排序 目前,我必须将表中的所有行拉回来,并在JSF中处理分页和排序客户端。不幸的是,这不是很好的性能,偶尔会导致我的应用服务器内存不足 理想情况下,这个datatable实现能够以某种方式包装JDBC查询或Hibernate查询。我并不拘泥于JSF1.2,如果这有关系的话,我计划很快升级到2.0。查看richfacesdatatable with table and table 或者 但是,是的,

如果有大量的表格数据,我将尝试在JSF数据表中显示这些数据。是否有任何实现或组件可以处理数据库分页和排序

目前,我必须将表中的所有行拉回来,并在JSF中处理分页和排序客户端。不幸的是,这不是很好的性能,偶尔会导致我的应用服务器内存不足


理想情况下,这个datatable实现能够以某种方式包装JDBC查询或Hibernate查询。我并不拘泥于JSF1.2,如果这有关系的话,我计划很快升级到2.0。

查看richfacesdatatable with table and table 或者

但是,是的,我忘记了一个小提示:),如果您需要转到数据库并在db级别处理过滤/排序,则需要通过扩展org.ajax4jsf.model.SerializableDataModel来提供您自己的数据模型实现


有一些博客是这样写的,请参见

当Java代码在Java内存中拖拽/复制数据存储(如RDBMS)的整个数据集,然后使用Java代码在Java内存中进行排序和过滤时,您总是会遇到内存问题。甚至当您将其存储在Web应用程序的会话范围内时,情况会变得更糟

内存效率最高的方法是让数据库在它发明的地方执行任务。SQL语言在每个
ORDER BY
子句下为您提供排序功能,在
WHERE
子句下提供过滤功能,在(DB供应商特定的)
LIMIT/OFFSET
子句/subselects/函数下,只返回基于firstrow和rowcount或lastrow的记录子集。这样,您最终只会在Java内存中显示实际要显示的数据集

没有标准的JSF组件能够做到这一点。它总是要求整个数据集在Java内存中可用,因为过滤和排序需要使用纯Java代码或Java脚本。JSF对SQL一无所知,您需要为datatable提供一个自定义的实现,并且/或者自己在数据访问层中控制/管理它。您可以获得许多新见解/想法,并在中找到一个启动示例。您还可以在我之前发布的文章中找到所需SQL查询的示例

祝你好运。

试试这个例子: