Java 决定在没有SQL的情况下分页图书列表的策略

Java 决定在没有SQL的情况下分页图书列表的策略,java,pagination,arraylist,Java,Pagination,Arraylist,我有一个ArrayList的Books从不同的Merchants中提取,并根据用户偏好,根据价格或客户评论,用Java进行排序: List<Book> books = new ArrayList<Book>(); 在这种情况下,第5页只是一组25条记录,从ArrayList中的第125条(5*25)记录开始,到ArrayList中的第149条记录结束 有更好的方法吗?重构应用程序,例如Hibernate从底层数据库中提取数据 Hibernate可以完成所有排序和分页,而

我有一个
ArrayList
Book
s从不同的
Merchant
s中提取,并根据用户偏好,根据价格或客户评论,用Java进行排序:

List<Book> books = new ArrayList<Book>();
在这种情况下,第5页只是一组25条记录,从
ArrayList
中的第125条(5*25)记录开始,到
ArrayList
中的第149条记录结束


有更好的方法吗?

重构应用程序,例如Hibernate从底层数据库中提取数据


Hibernate可以完成所有排序和分页,而无需始终将其保存在内存中。

重构应用程序,例如Hibernate可以从底层数据库中提取数据


Hibernate可以完成所有的排序和分页,而无需始终将其保存在内存中。

在我看来,GET或POST的请求应该没有多大区别,所以我想说,做任何能让你的船漂浮的事情(保护头部免受RESTful反驳)。我仍然关心的一件大事是把清单留在记忆中。把它从单独的商家中拉出来似乎是一个很好的理由,因为每次请求页面时不重新检索它,但我个人会考虑将结果存储在本地数据库中,即使是暂时的。当你有很多并发用户时,在你的应用服务器上保留这么多的数据会有后果。

我认为请求是GET或POST不会有太大的区别,所以我会说做任何能让你的船漂浮的事情(保护头部免受RESTful反驳)。我仍然关心的一件大事是把清单留在记忆中。把它从单独的商家中拉出来似乎是一个很好的理由,因为每次请求页面时不重新检索它,但我个人会考虑将结果存储在本地数据库中,即使是暂时的。当您有大量并发用户时,在应用服务器的内存中保留这么多数据将产生后果。

我有一个开源库来处理Java Web应用程序中的分页问题。以下是链接:

这可能是你考虑的一个选择


如果您有任何问题,请随时提问。

我有一个开源库来处理Java Web应用程序中的分页问题。以下是链接:

这可能是你考虑的一个选择


如果您有任何问题,请随时提问。

用户通常会查看多少结果页面?数据有多大(总数据还是每条记录)? 这个大列表是一直存在的(静态的),还是每次查询都创建的

不是返回一个包含25个结果的页面,而是可以在JSON数组中输出(比如)200,并使用javascript显示n。。n+24结果。如果页面上有所有结果,也可以在那里进行排序。如果您想在显示其他页面时进行用户跟踪(更新广告等),请请求1x1.gif?user=u1&action=which

根据您的记录大小、流量、用户行为、发送 JSON可能比服务器上生成的html更紧凑,因此

  • 使用更少的带宽
  • 对服务器进行的查询更少
  • 用户可以看到更好的响应,因为页面更新更快(服务器执行的查询更少)
但是你需要做一些分析,看看这是否对你有帮助。例如,如果超过一半的人总是看第二页的结果,那么你也可以将第一页的结果26-50一起发送


另一方面,如果没有人浏览第3页,您就不会希望发送500个结果。除非你想夸大你的交通量。或者你可以做一些动态的事情,比如在可用带宽较少时发送较小的页面。上帝啊,我们生活在原始时代。

用户通常会看到多少结果页面?数据有多大(总数据还是每条记录)? 这个大列表是一直存在的(静态的),还是每次查询都创建的

不是返回一个包含25个结果的页面,而是可以在JSON数组中输出(比如)200,并使用javascript显示n。。n+24结果。如果页面上有所有结果,也可以在那里进行排序。如果您想在显示其他页面时进行用户跟踪(更新广告等),请请求1x1.gif?user=u1&action=which

根据您的记录大小、流量、用户行为、发送 JSON可能比服务器上生成的html更紧凑,因此

  • 使用更少的带宽
  • 对服务器进行的查询更少
  • 用户可以看到更好的响应,因为页面更新更快(服务器执行的查询更少)
但是你需要做一些分析,看看这是否对你有帮助。例如,如果超过一半的人总是看第二页的结果,那么你也可以将第一页的结果26-50一起发送

另一方面,如果没有人浏览第3页,您就不会希望发送500个结果。除非你想夸大你的交通量。或者你可以做一些动态的事情,比如在可用带宽较少时发送较小的页面。上帝啊,我们生活在原始时代

<input type="hidden" id="pageNumber" value="0">
<a href="#" onClick="pageNumber=5; this.form.submit()">Page 5</a>