`
HJXia
  • 浏览: 88055 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

分页封装

    博客分类:
  • JAVA
阅读更多
PagesFactory:
/**
 * 分页工厂
 * 根据数据库类型选择分页对象
 * 
 * @author  hjxia
 * @version  [版本号, 2010-7-27]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class PagesFactory
{
    public static final String DEFAULT_DB_TYPE = "oracle";
    
    /**
     * 私有构造器,不允许实例化
     */
    private PagesFactory()
    {
        
    }
    
    /**
     * 获取分页对象
     * 
     * @return SplitPageInfo
     * @see [类、类#方法、类#成员]
     */
    public static SplitPageInfo getSplitPageInfo()
    {
        SplitPageInfo page = null;
        
        if ("oracle" == DEFAULT_DB_TYPE)
        {
            page = new OraclePageInfo();
        }
        
        return page;
    }
}



SplitPageInfo:
/**
 * 分页基本对象
 * 如要实现相应数据库分页对象,继承此类
 * 
 * @author  hjxia
 * @version  [版本号, 2010-7-27]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public abstract class SplitPageInfo implements Serializable
{
    /**
     * 序列号
     */
    private static final long serialVersionUID = 1L;

    /** 开始记录数 */
    protected int beginNum = 0;
    
    /** 结束记录数 */
    protected int endNum;
    
    /** SQL语句 */
    private String strSQL = "";
    
    /** 分页查询的URL */
    private String queryURL;
    
    /** 排序字段名称 */
    private String orderName;
    
    /** 排序字段类型 */
    private String orderType;
    
    /** 记录总数 */
    private int totals;
    
    /** 每页显示记录数 */
    private int perPageNum;
    
    /** 总页数 */
    private int allPage;
    
    /** 当前页 */
    private int currPage;
    
    /**
     * 构造
     */
    public SplitPageInfo()
    {
    }
    
    /**
     * 获取分页SQL
     * 抽象方法,子类实现
     * @return String sql
     * @see [类、类#方法、类#成员]
     */
    public abstract String getSplitSql();
    
    /**
     * 计算开始和结束记录数
     * 
     * @see [类、类#方法、类#成员]
     */
    public void doPage()
    {
        // 计算总页数
        this.setAllPage((this.totals + this.perPageNum - 1) / this.perPageNum);
        
        if (currPage > allPage)
        {
            currPage = 1;
        }
        // 计算开始记录数
        this.beginNum = (this.getCurrPage() - 1) * this.perPageNum;
        // 计算结束记录数
        this.endNum = (beginNum + perPageNum) < totals ? beginNum + perPageNum : totals;
    }
    
    /**
     * 设置排序SQL
     * 
     * @param sql 原始sql
     * @see [类、类#方法、类#成员]
     */
    public void setOrderSql(String sql)
    {
        if (null != this.orderName && !"".equals(this.orderName))
        {
            sql += " order by " + this.orderName;
            sql += " " + this.orderType;
        }
        
        this.setStrSQL(sql);
    }
    
    /**
     * 获取查询总记录数的SQL
     * 
     * @return String 查询总记录数的SQL
     * @see [类、类#方法、类#成员]
     */
    public String getTotalSql()
    {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("select count(*) as recordCount from (");
        stringBuffer.append(this.strSQL);
        stringBuffer.append(") tableName");
        
        return stringBuffer.toString();
    }

    public int getBeginNum()
    {
        return beginNum;
    }

    public void setBeginNum(int beginNum)
    {
        this.beginNum = beginNum;
    }

    public int getEndNum()
    {
        return endNum;
    }

    public void setEndNum(int endNum)
    {
        this.endNum = endNum;
    }

    public String getStrSQL()
    {
        return strSQL;
    }

    public void setStrSQL(String strSQL)
    {
        this.strSQL = strSQL;
    }

    public String getQueryURL()
    {
        return queryURL;
    }

    public void setQueryURL(String queryURL)
    {
        this.queryURL = queryURL;
    }

    public String getOrderName()
    {
        return orderName;
    }

    public void setOrderName(String orderName)
    {
        this.orderName = orderName;
    }

    public String getOrderType()
    {
        return orderType;
    }

    public void setOrderType(String orderType)
    {
        this.orderType = orderType;
    }

    public int getTotals()
    {
        return totals;
    }

    public void setTotals(int totals)
    {
        this.totals = totals;
    }

    public int getPerPageNum()
    {
        return perPageNum;
    }

    public void setPerPageNum(int perPageNum)
    {
        this.perPageNum = perPageNum;
    }

    public int getAllPage()
    {
        return allPage;
    }

    public void setAllPage(int allPage)
    {
        if (allPage < 1)
        {
            allPage = 1;
        }
        
        this.allPage = allPage;
    }

    public int getCurrPage()
    {
        return currPage;
    }

    public void setCurrPage(int currPage)
    {
        if (currPage < 1)
        {
            currPage = 1;
        }
        
        this.currPage = currPage;
    }
}



OraclePageInfo:
/**
 * ORACLE分页对象,继承自SplitPageInfo
 * 
 * 
 * @author  hjxia
 * @version  [版本号, 2010-7-27]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class OraclePageInfo extends SplitPageInfo
{
    /**
     * 获取分页SQL
     * @return
     */
    public String getSplitSql()
    {
        this.doPage();
        StringBuffer sqlBuffer = new StringBuffer();
        sqlBuffer.append("select * from (select t.*, rownum r_id from (");
        sqlBuffer.append(this.getStrSQL());
        sqlBuffer.append(") t where rownum <= ");
        sqlBuffer.append(endNum);
        sqlBuffer.append(") where r_id > ");
        sqlBuffer.append(beginNum);
        
        String str = sqlBuffer.toString();
        
        //记录日志
        
        return str;
    }
}
分享到:
评论

相关推荐

    MyFaces Oracle大数据表分页封装.docx

    在这个文档中,我们将探讨如何使用`MyFaces`结合`Oracle`进行大数据表的分页封装。 首先,我们来看`DataPage`类。这个类是用于存储和管理分页数据的核心,它包含了三个主要属性:`datasetSize`(数据集总大小),`...

    分页封装类

    分页封装类

    分页代码(已封装)

    描述中的"分页封装"进一步确认了这个内容的核心是关于如何有效地实现和组织分页代码。 分页的基本原理是将大量数据分成若干个较小的部分,每次只加载一部分到用户界面,而不是一次性加载所有数据。这样可以减少内存...

    js实现的异步分页封装

    总的来说,使用JavaScript实现异步分页封装,不仅可以提升用户体验,还能使代码结构清晰,易于维护。通过封装组件,可以方便地在多个地方复用这一功能,大大提高了开发效率。在实际项目中,结合前端框架如React、Vue...

    将Web层分页封装成通用模块

    以"28_传智播客巴巴运动网_将Web层分页封装成通用模块"为例,该示例可能演示了如何在Web应用中实现分页功能的通用封装。可能涉及到的技术栈包括但不限于Spring MVC、MyBatis等。开发者通过创建一个分页工具类,实现...

    JAVA开发WEB分页封装办法实现

    本文将深入探讨如何在Java中实现Web分页封装,以便在实际项目中灵活应用。 首先,我们需要了解分页的基本概念。分页是将大量数据分割成较小、可管理的部分,每次只加载一部分到前端显示。这有助于减少网络传输的...

    ADO.NET分页封装[支持多表连接查询分页]-代码实现

    本教程将深入探讨如何使用ADO.NET进行分页封装,特别是对于涉及多表连接查询的场景。分页在大数据量的展示中尤为重要,因为它允许用户以更高效的方式浏览和管理数据,而不会一次性加载所有记录导致性能下降。 首先...

    php实现数据分页封装

    4. **封装分页类** 将以上逻辑封装成一个类,可以方便地在项目中重复使用。创建一个名为`Page`的类,包含初始化、计算总页数、生成分页链接和获取当前页数据的方法。例如: ```php class Page { private $db; ...

    SSH基于Eclipse将Web层分页封装成通用模块

    教学-传智播客-项目视频经典之作巴巴运动网106集-28将Web层分页封装成通用模块源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...

    将Web层分页封装成通用模块源代码

    教学-传智播客-项目视频经典之作巴巴运动网106集-28将Web层分页封装成通用模块源代码 所需要的jar文件: (一)、Hibernate: 位于 "\hibernate-distribution-3.3.2.GA" 目录下的jar文件: hibernate3.jar 位于 "\...

    struts自制标签分页封装

    在 Struts 自制标签分页封装的场景中,我们通常是为了提高应用的可维护性和易用性,通过自定义标签来实现页面的动态分页功能。在不依赖 Struts 1.3 框架包的情况下,我们可以自己编写相关的组件来达到相同的效果。 ...

    Hibernate分页封装

    Hibernate分页封装 Hibernate是一个流行的Java持久化框架,提供了对数据库的访问和操作。然而,在实际开发中,分页是一种非常常见的需求,Hibernate也提供了相应的解决方案。下面,我们将对Hibernate分页封装进行...

    分页封装源码结合存储过程

    这里的"分页封装源码结合存储过程"是指使用编程语言(如C#、Java等)封装一套分页查询的代码,并与数据库中的存储过程相结合,实现高效的数据分页检索。 首先,我们来详细了解一下分页的基本概念。分页是将数据库...

    python中的分页封装

    python中的分页封装

    jsp分页封装

    本项目“jsp分页封装”着重于实现自定义的分页功能,旨在提供一个高效且可复用的解决方案。下面将详细介绍这个项目中的关键知识点。 1. **自定义分页组件**: - 在Java Web应用中,自定义分页组件通常包括两个部分...

    asp.net分页封装源码结合存储过程 而且能够通用

    首先,"asp.net分页封装源码"是指将分页逻辑打包成可复用的代码组件,通常是一个类库或服务,以便在多个页面或项目中使用。这样的封装可以减少代码重复,提高开发效率,并确保代码一致性。封装后的分页组件通常会...

    java自己写了一个带有缓存的序列,简单的分页封装(都没有人给过评论)

    标题中的“java自己写了一个带有缓存的序列,简单的分页封装”暗示了这是一个关于Java编程的实践案例,其中涉及到缓存技术和分页处理。在IT行业中,缓存是提高系统性能的重要手段,而分页则常用于处理大量数据的显示...

    js分页控件--js封装的分页控件

    自己写的一个js分页控件.已经封装,可以直接使用. 适合各种用途的分页控制. 如果界面不够美观,只需要修改css即可.

    Spring jdbctemplate + mysql 分页封装

    综上所述,Spring JdbcTemplate结合MySQL的分页查询封装涉及到的主要知识点有:Spring的JdbcTemplate用法、MySQL的分页查询(LIMIT和OFFSET)、结果集映射、分页结果对象的构建、以及代码封装与复用。通过这些技术,...

    网站分页代码封装jar包

    本项目提供了一个针对SQL Server数据库的Java代码封装,帮助开发者快速实现分页功能,避免重复编写类似的代码。 首先,我们需要理解分页的基本原理。在SQL中,我们可以使用`LIMIT`(在MySQL中)或`OFFSET`和`FETCH ...

Global site tag (gtag.js) - Google Analytics