[英]How to use pagination in spring mvc and hibernate application
我已經開發了Spring MVC + MySQL和休眠應用程序
它處理超過數千條記錄。 在這里,我正在使用dataTable來顯示記錄。 工作正常。 但是,我的問題是記錄加載的性能問題。
當我在數據庫服務器中執行查詢時,只需幾秒鍾即可加載成千上萬條記錄。 但是當我通過我的應用程序使用查詢時,需要花費5秒鍾以上的時間。
我認為dataTable分頁要花費太多時間來加載記錄。我如何解決此類問題。 我已經意識到該解決方案僅適用於服務器端分頁。
我不知道如何使用服務器端的搜索和排序控件進行諸如“上一頁1 2 3 4 5下一頁”這樣的分頁。
因此,請告訴我如何在我的應用程序中顯示上述要求的記錄。 小片段代碼可能對我的知識成長更有用。
由於您正在使用Spring Data JPA,因此請查看非常有用的PagingAndSortingRepository
接口。 本教程將向您展示所有使用方式
我最近實現了它。 按照步驟。
每當調用url時,您就發送data-List元素的總數,然后根據需要使用jstl播種按鈕total%10或使用任何算法。
在控制器中發送一個可變的分頁,顯示多少分頁
在休眠狀態下使用
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>
我遇到了同樣的問題,我在我的項目中使用了Smart GWT,它沒有分頁功能。
因此,剩下的唯一選擇就是在服務器端使用分頁。 我更改了服務,並使其采用4個參數start
, end
, sort-field
, sort-direction
。
該服務將從數據庫的start
到end
的記錄數返回,這些記錄將按sort-field
(dataTable的列之一)分組,並且sort-direction
為ASC
或DESC
。
這樣,用戶可以選擇他/她希望在每頁上看到的記錄數(可以是下拉菜單中的預定義值),並且可以從服務中檢索這些記錄數(通過更改start
和end
,並調用服務) )。 您將不必面對一次性獲得數千條記錄的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.