zoukankan      html  css  js  c++  java
  • Oracle分页

    自己的练习:

    /*****普通的查询(30数据)****/
    select * from ENVIRONMENT_APPLY_AUDIT;
    
    
    /*******查询带行号的数据**/
    select ROWNUM ru,AAA.* from (      select * from ENVIRONMENT_APPLY_AUDIT   ) AAA;
    
    /*******查询第一页   每页5条数据***/
    select * from (select AAA.*,ROWNUM ru from (select * from ENVIRONMENT_APPLY_AUDIT ) AAA where ROWNUM<6);
    select * from (select ROWNUM ru,AAA.* from (select * from ENVIRONMENT_APPLY_AUDIT ) AAA where ROWNUM<6) where ru>0;
    
    
    /**********查询第二页数据********************/
    select * from (select ROWNUM ru,AAA.* from (select * from ENVIRONMENT_APPLY_AUDIT ) AAA where ROWNUM<11) where ru>5;
    
    
    /**********查询第三页数据********************/
    select * from (select ROWNUM ru,AAA.* from (select * from ENVIRONMENT_APPLY_AUDIT ) AAA where ROWNUM<16) where ru>10;

     查询分页就是在原来语句的查询条件上加上根据行号分页的条件,注意与mysql不同的是oracle是从1开始。假设页大小都是5:

    mysql分页计算:

    页号 起始索引 取几个
    1 0 5
    2 5 5

      计算第一页:limit 0,5

         第二页: limit 5,5

          规律: limit (pageNum-1)*pageSize,pageSize

    Oracle计算分页:

    页号 起始行号 最大行号
    1 1 5
    2 6 10

          

       计算第一页:ROWNUM<=5) where ru>0; 

         第二页:ROWNUM<=10) where ru>5;

        规律:ROWNUM<=pageSize*pageNum)where ru>(pageNum-1)*pageSize;

     mybatis利用oracle进行分页就是在上面原始语句的基础上包装两层之后进行分页查询:

    例如一个原生的java分页Oracle:

    package daoImpl;
    
    import java.math.BigDecimal;
    import java.sql.SQLException;
    import java.util.List;
    
    import javax.sql.DataSource;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    import org.apache.commons.dbutils.handlers.ScalarHandler;
    import org.junit.Test;
    
    import bean.Emp;
    import dao.Empdao;
    import utils.DataSourceUtils;
    /**
     * 员工管理模块
    * @author: qlq
    * @date :  2017年7月14日上午9:59:51
    * @description:Empdao的实现类
     */
    
    public class EmpDaoImpl implements Empdao {
    
        /**
         * 获取总的记录数
         */
        @SuppressWarnings("unchecked")
        @Override
        public int findAllRecord() throws Exception {
            QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
            String sql = "SELECT COUNT(ID) FROM EMP";
            @SuppressWarnings({ "unused", "rawtypes" })
            BigDecimal bg  = qr.query(sql, new ScalarHandler());
            return bg.intValue();
        }
    
        /**
         * 获取分页记录
         */
        @Override
        public List<Emp> findAllRecord(int start, int end) throws Exception {
            QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
            String sql = " select xx.id,xx.name,xx.hiredate "+
            " from (select rownum xid,emp.* from emp where rownum<?) xx where  xid>?";        
            Object[]  paras={end,start};
            return qr.query(sql, new BeanListHandler<Emp>(Emp.class), paras);
        }
        @Test
        public void test1() throws SQLException{
            EmpDaoImpl eDaoImpl = new EmpDaoImpl();
            try {
                System.out.println("共有"+eDaoImpl.findAllRecord()+"条记录");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("取第2页数据------------------");
            try {
                System.out.println(eDaoImpl.findAllRecord(5, 11));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }

       ibatis进行分页的通用(isParameterPresent标签是通用的,可以放在任何需要进行分页查询的sql中)查询:(每次分页都是传一个pagination参数为true(传入起始和结束为止),然后在原来的查询条件上进行两次包装即可完成分页)

      <select id="ibatorgenerated_selectByExample" resultMap="ibatorgenerated_BaseResultMap" parameterClass="com.tyust.bean.en.EnApplyInfoExample" >
        <!--
          WARNING - This element is automatically generated by Apache iBATIS ibator, do not modify.
        -->
            <isParameterPresent>
            <isEqual property="pagination" compareValue="true">
               <![CDATA[SELECT * FROM
                (
                SELECT A.*, ROWNUM RN
                FROM (
               ]]>
            </isEqual>
        </isParameterPresent>
        select ENVIRONMENT_APPLY_ID, ENVIRONMENT_APPLY_UNIT_ID, ENVIRONMENT_APPLY_USER_ID,
          ENVIRONMENT_APPLY_TEL, ENVIRONMENT_APPLY_STATUS, ENVIRONMENT_APPLY_DATE,
          ENVIRONMENT_APPLY_OPINION, ENVIRONMENT_APPLY_SAMPLY, ENVIRONMENT_APPLY_PRODUCTION,
          ENVIRONMENT_APPLY_USER_NAME
        from ENVIRONMENT_APPLY_INFO
        <isParameterPresent >
          <include refid="ENVIRONMENT_APPLY_INFO.ibatorgenerated_Example_Where_Clause" />
          <isNotNull property="orderByClause" >
            order by $orderByClause$
          </isNotNull>
        </isParameterPresent>
         <isParameterPresent>
            <isEqual property="pagination" compareValue="true">
                <![CDATA[
                    ) A
                    WHERE ROWNUM <=#limit#
                    )
                    WHERE RN >#start#
                ]]>
            </isEqual>
        </isParameterPresent>
      </select>
  • 相关阅读:
    [转]看懂UML类图
    [转]客户需要什么样的业务解决方案
    [转]逻辑和计算机
    [转]数据库备份与恢复方案
    125个工具与技术(PMBOK2008)
    72个可交付成果(PMBOK2008)
    47个过程(PMBOK2008)
    项目管理详细任务(PMBOK2008)
    项目管理过程组和知识领域表(PMBOK2008)
    项 目 管 理 知 识 体 系 指 南 (PMBOK2008)
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/8435580.html
Copyright © 2011-2022 走看看