如何在spring mvc和hibernate应用程序中使用分页

时间:2014-04-03 07:15:13

标签: java spring hibernate spring-mvc pagination

我开发了spring MVC + MySQL和hibernate应用程序

它处理超过数千条记录。在这里,我使用dataTable来显示记录。它工作正常。但是,我的问题是记录加载的性能问题..

当我在db server中执行查询时,加载数千条记录需要几分之一秒。但是当我通过我的应用程序使用查询时,它需要超过5秒。

我认为dataTable分页需要花费太多时间来加载记录。我该如何解决这类问题。我已经意识到解决方案只适用于服务器端分页。

我不知道如何使用服务器端的搜索和排序控件来制作像“Prev 1 2 3 4 5 Next”这样的分页。

那么,请告诉我如何在我的应用程序中显示上述要求的记录。 小块代码可能对我的知识增长更有帮助。

3 个答案:

答案 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个参数startendsort-fieldsort-direction

该服务将从数据库start返回到end个记录,这些记录将按sort-field(您的dataTable的一列)进行分组,sort-direction为{{{ 1}}或ASC

这样,用户可以选择他/她希望每页显示的记录数(可以是下拉列表中的预定义值),并且您可以从服务中检索这些记录数(通过更改DESC和{{ 1}},并调用服务)。你不必面对一次性获取数千条记录的问题。

相关问题