我开发了spring MVC + MySQL和hibernate应用程序
它处理超过数千条记录。在这里,我使用dataTable来显示记录。它工作正常。但是,我的问题是记录加载的性能问题..
当我在db server中执行查询时,加载数千条记录需要几分之一秒。但是当我通过我的应用程序使用查询时,它需要超过5秒。
我认为dataTable分页需要花费太多时间来加载记录。我该如何解决这类问题。我已经意识到解决方案只适用于服务器端分页。
我不知道如何使用服务器端的搜索和排序控件来制作像“Prev 1 2 3 4 5 Next”这样的分页。
那么,请告诉我如何在我的应用程序中显示上述要求的记录。 小块代码可能对我的知识增长更有帮助。
答案 0 :(得分:3)
由于您使用的是Spring Data JPA,请查看非常有用的PagingAndSortingRepository
界面。 This教程将向您展示查看其使用方式所需的全部内容
答案 1 :(得分:0)
我最近实施了它。按照步骤进行操作。
每当调用url时,都会发送data-list元素的总数 而不是使用jstl播种按钮,根据您的需要总%10或使用任何算法。
在控制器中发送一个变量分页,显示分页多少
在Hibernate中使用
example:
query.setFirstResult(1);
query.setMaxResults(10);
jsp上的跟着这个。代码更大。
<c:if test="${not empty pendingSTT}">
<div class="pagination">
<script type="text/javascript">
function setBP(val){
$("#BP").val(val);
}
</script>
<form:form commandName="register" action="/veepropbeta/pendingshare" method="GET">
<form:hidden path="BP" id="BP" />
<ul>
<c:set var="hello" value="0" />
<c:if test="${not empty param['BP']}">
<c:set var="hello" value="${param['BP']}" />
</c:if>
<c:if test="${hello>0}">
<li><a href=""><button class="btn btn-default" onclick="return setBP(this.value-1);" value="${hello}">Prev</button></a></li>
</c:if>
<c:if test="${not empty param['BP']}">
<c:set var="hello" value="${param['BP']}" />
</c:if>
<c:forEach begin="${hello}" end="${pagination-1}" var="limit" varStatus="status" >
<c:if test="${status.count<=10}" >
<li><a href=""> <button class="btn btn-default" style="float: left;" onclick="return setBP(this.value-1);" value="${limit+1}">${limit+1}</button></a></li>
<c:set var="last" value="${status.count}" />
</c:if>
<c:if test="${status.count>10}" >
<c:set var="ending" value="true" />
</c:if>
</c:forEach>
<c:if test="${ending.equals('true')}">
<li><a href=""><button class="btn btn-default" onclick="return setBP(this.value-1);" value="${last+1}">Next</button></a></li>
</c:if>
</ul>
</form:form>
</div>
</c:if>
答案 2 :(得分:0)
我遇到了同样的问题,我在我的项目中使用Smart GWT,它没有分页功能。
所以,只留给我的选项是在服务器端使用分页。
我更改了服务,并将其设为4个参数start
,end
,sort-field
,sort-direction
。
该服务将从数据库start
返回到end
个记录,这些记录将按sort-field
(您的dataTable的一列)进行分组,sort-direction
为{{{ 1}}或ASC
。
这样,用户可以选择他/她希望每页显示的记录数(可以是下拉列表中的预定义值),并且您可以从服务中检索这些记录数(通过更改DESC
和{{ 1}},并调用服务)。你不必面对一次性获取数千条记录的问题。