繁体   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