簡體   English   中英

如何在Spring MVC和Hibernate應用程序中使用分頁

[英]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個參數startendsort-fieldsort-direction

該服務將從數據庫的startend的記錄數返回,這些記錄將按sort-field (dataTable的列之一)分組,並且sort-directionASCDESC

這樣,用戶可以選擇他/她希望在每頁上看到的記錄數(可以是下拉菜單中的預定義值),並且可以從服務中檢索這些記錄數(通過更改startend ,並調用服務) )。 您將不必面對一次性獲得數千條記錄的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM