oracle分页技术讲解

      编写任务,数据库的数据量较大,一次获得了所有的用户,造成服务器的内存负担特别重,便对代码做了优化,采用了分页技术来分批获得用户的数据,减少对内存的负担。

     笔者整理了如下几种分页技术:

     1: hibernate分页技术(直接调用hibernate接口)

      public List query(int pageSize,int currentPage,String queryHql){

      return (List) getHibernateTemplate().executeWithNativeSession(new       HibernateCallback() {

@Override

            public Object doInHibernate(Session session) throws HibernateException, SQLException {

            //获取总数

             Integer total = ((Long) queryCount.uniqueResult()).intValue();

             Query query = session.createQuery(queryHql);

             //计算第一个应该查询数据的位置(这里只是简单的描述,没有考虑当大于总数的情况)

             int firstResult = pageSize * (currentPage - 1);

             query.setFirstResult(firstResult);              //设置查询的总数

              query.setMaxResults(pageSize);

              reuturn  query.list();

         }

    }

}

     2:jdbc分页技术

    (1)jdbc查询第一种方案

    查询总数:select count(*) as total from account;

     设置分页大小:int pageSize=1000;

      总共页数  int pages = total/pageSize;

     是指分页查询语句:select accountid from (select accountid,rownum as rown from account where and rownum<=x ) c where c.rown>y ;(查询在y到x的数据)

     执行体:

    //

       for(int i=0;i<=pages;i++){

min=i*pageSize;

if(i==pages)

max=total;

else

max=min+pageSize;

            jdbcTemplate.queryForList(queryAccountSql,new Object[]{max,min})

//查询语句        }

(2)jdbc查询第二种方案:

    查询sql语句:

            select accountid from (select accountid,rownum as rown from account ) c where c.rown between x and y;(其中x为min,第二个y为max);

     第一种方案和第二种方案比较:

             第一个查询效率比第二个查询效率高:第一种只需要内层查询只需要返回x 个结果,而第二种方案内层查询需要返回所有的查询结果。

           

相关推荐