`

DisplaybTag实现内存分页

阅读更多

本文转载于http://blog.csdn.net/blackwingzhong/article/details/3322145

 

Displaytag用来实现内存分页的确很方便,但是当列表数据太大,就不适宜一次过读出来内存进行分页了。Displaytag当然也支持进行数据库分页,基本上主要是实现org.displaytag.pagination.PaginatedList接口,并且通过hibernate的相应方法进行查询就行。

   本项目是Struts2,Hibernate,Spring主流框架结合开发的。实现数据库分页的步骤为:

  1.实现PaginatedList接口

   PaginatedList的代码为:

    public interface PaginatedList
    {
        List getList();
        int getPageNumber();
        int getObjectsPerPage();
        int getFullListSize();
        String getSortCriterion();
        SortOrderEnum getSortDirection();
        String getSearchId();
    }

   从以上代码可以知道,此接口应该有相应的成员变量,那么在实现这个接口的同时,要补充定义好相应的变量。

   

  2.在Hibernate层实现分页查询数据库

   Hibernate支持分批对数据库进行查询,这里是使用Query接口:

   

            Session s=null;
            Query query=null;
            
            String queryString="select o.id,o.ICityId,o.SName,o.IPublishCount,o.DRegisterDate,r.SRegionName from TbOwnerUser as o,TbRegion as r " +
            " where o.ERole='owner' and o.ICityId=r.id order by o.ICityId";
            try {
                 s= this.getSession();
                 query= s.createQuery(queryString);
               
                //设置起始查询的记录号
                query.setFirstResult((pageNumber - 1) * pageSize);
                //设置一次查询所要获得的记录数,即是每页记录数
                query.setMaxResults(pageSize);
                            return query.list();
            } catch (Exception e) {
                System.out.println("获取业主列表时出错!");
                e.printStackTrace();
            }finally{
                try {
                    s.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

  其中,实现分页查询的主要是:

    query.setFirstResult((pageNumber - 1) * pageSize);
    query.setMaxResults(pageSize);

   setFirstResult是指定这次查询开始的记录数,setMaxResults是指定一次查询所要查询出的记录条数。每次查询都只会读取pageSize大小的数据出去,那么就节省了很多内存空间了。

 

  3.在action中设置分页相关的参数

   

    HttpServletRequest request=ServletActionContext.getRequest();
    HttpSession session=request.getSession();
            if(request.getParameter("page")!=null && "".equals(request.getParameter("page"))==false)
                pageNumber=Integer.parseInt(request.getParameter("page"));
            else
                pageNumber=1;
            
            ListPagination list=new ListPagination();
            list.setFullListSize(this.getDeletedOwnerListSize());
            list.setList(backendOwnerUserManageService.getDeletedOwners(pageNumber, SessionParameters.PAGE_SIZE));
            list.setObjectsPerPage(SessionParameters.PAGE_SIZE);
            list.setPageNumber(pageNumber);

            displaytag是用“page”这个参数来实现页数的传递的,所以request.getParameter("page")获得当前页号。ListPagination list=new ListPagination()为自己实现了PaginatedList的类,在action中要把整个列表大小、当前页数、每页记录数等信息设置给自己实现了PaginatedList的类,之后就可以直接把这个list传递给displaytag进行输出了。

 

  4. displaytag显示

   这里只需要把上面设置好的list交给display:table的name属性进行显示就可以。

    <display:table name="${backendListOwnerAction.pageList}" id="ownerTable" >
    </displaytag:table>

  至此就简单的实现了内存分页,每次翻页都会查询一次数据库,虽然查询数据库的次数增加了,但是对于大list来说,能够节省不少内存空间。

 

分享到:
评论

相关推荐

    Linux内存分页机制原理

    ### Linux内存分页机制原理详解 #### 一、引言 在现代操作系统中,内存管理是确保系统稳定性和性能的关键技术之一。Linux作为一款广泛使用的开源操作系统,其内存管理机制非常成熟且高效。本文旨在深入解析Linux...

    操作系统内存分页机制的实现

    总的来说,通过VC++实现操作系统内存分页机制,不仅可以深入理解这一核心概念,还能提高编程技能。这涉及到内存管理、中断处理、数据结构和算法等多个方面的知识,是一个全面且富有挑战性的实践项目。在实际操作中,...

    06实现mybatis分页插件demo

    06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo06实现mybatis分页插件demo...

    02内存分页处理(done).zip

    java内存分页 内存分页工具类 * 使用场景:多个查询结果组合后分页的情况 * 1、endNum置为上限,查分页(最大限度可查) * 2、不分页查询,用上限判断(超过上限给提示不能查) * 注意:需要分页的全量数据要...

    操作系统 程实现请求分页存储管理页面Optimal、FIFO、LRU置换算法

    本实验旨在通过实际编程实现请求分页存储管理中的三种页面置换算法:最优置换算法(Optimal)、先进先出置换算法(FIFO)以及最近最少使用置换算法(LRU),帮助学生深入理解和掌握虚拟存储管理的核心概念和技术。...

    java实现的一个分页程序

    6. **内存分页**:除了在数据库层面进行分页,也可以选择在应用程序中实现内存分页,将数据加载到内存后进行处理。但这可能导致内存压力,尤其是当数据量大的时候。 7. **响应式分页**:随着Web开发的进化,响应式...

    mybatis 分页代码

    本知识点主要探讨的是如何在MyBatis中实现分页查询,这是一种常见的需求,特别是在处理大数据量时,避免一次性加载所有数据导致内存溢出。 在传统的数据库操作中,分页通常涉及到LIMIT和OFFSET关键字(在MySQL中)...

    用recyclerview实现分页滑动,横向纵向分页

    本教程将深入讲解如何利用RecyclerView实现横向和纵向的分页滑动,充分利用Android原生功能。 首先,理解RecyclerView的基本结构。RecyclerView包含一个Adapter,它负责将数据集绑定到视图上,以及一个...

    java实现分页 jsp分页 分页

    java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页java实现分页 jsp分页 分页

    使用JSP实现查询分页

    分页技术主要解决的是当数据量庞大时,一次性加载所有数据到页面会导致页面加载缓慢、内存消耗过大以及用户体验下降等问题。通过分页,可以将数据分成多个小块,每次只加载其中一部分,不仅提高了页面的响应速度,也...

    Android-一个快速实现RecyclerView分页加载的轻量级库

    综上所述,快速实现RecyclerView分页加载的轻量级库简化了开发过程,使得在Android应用中实现高效分页加载变得更加容易。通过理解RecyclerView的工作原理和分页加载的核心概念,开发者可以更好地利用这些库来提升...

    mysql数据库实现分页

    以下是对分页实现的详细说明: 一、基础概念 分页是将数据库查询结果分割成多个页面,每次请求只返回一部分数据,而不是一次性返回所有数据。这在Web应用中尤其常见,如搜索引擎、电商网站等,用户通常会通过点击...

    基于c#实现的分页

    基于C#实现的分页控件详解 在本文中,我们将详细介绍基于C#实现的分页控件,并对其实现原理和代码进行详细解释。 分页控件的实现原理 分页控件是基于C#实现的,使用ASP.NET技术来实现。控件的核心是定义一个委托...

    java 真假分页,jsp servlet 实现的真分页与假分页

    **假分页**,又称为内存分页,其主要特点是服务器一次性加载所有数据到内存中,然后根据用户请求的页码在内存中进行分页展示。这种方法的优点在于实现简单,但缺点也很明显,当数据量大时,可能导致内存溢出,影响...

    使用js实现简单分页

    JavaScript(简称js)是网页开发中的重要脚本语言,可以用来实现动态的、交互式的分页功能。本文将深入探讨如何使用JavaScript实现简单分页,并结合提供的分页模块进行分析。 首先,我们要理解分页的基本原理。分页...

    Android Recyclerview实现水平分页GridView效果示例

    很明显横向滑动的分页,第一反应就是使用ViewPager,毕竟只要通过自定义ViewPager,实现这个效果还是很容易,但是实际中问题时,当前模块是Recyclerview中某一个Holder,为了性能,肯定尽量使用Recyclerview去复用...

    JSP实现真分页和假分页

    本篇文章将深入探讨JSP实现的真分页和假分页的区别、原理以及具体实现方法。 首先,我们需要理解什么是真分页和假分页。假分页,也称为无状态分页,主要通过在客户端存储和处理分页信息,如当前页数和每页显示的...

    用struts实现的分页

    在处理大量数据时,分页是一种常见的优化手段,能够有效地提升用户体验,避免一次性加载过多数据导致的页面响应慢或者内存压力大等问题。下面我们将深入探讨如何在Struts框架下实现分页功能。 首先,我们需要理解...

    SSH实现分页实例

    在这个"SSH实现分页实例"中,我们将深入探讨如何在SSH框架下实现数据的分页显示。 首先,Struts2作为MVC框架,负责处理HTTP请求并调度控制层逻辑。它通过Action类来封装业务逻辑,并通过配置ActionMapping定义请求...

Global site tag (gtag.js) - Google Analytics