sybase的分页处理

来源:互联网 发布:游戏碎片整理软件 编辑:程序博客网 时间:2024/05/21 22:46

对于小数据量,我们的分页可以通过ibatis来完成,但是对于万级以上的数据来说,这就是个不现实的事情了。

首先,ibatis的分页是通过一次性将数据提取到内存中,再根据需要筛选数据。所以,对于百万、千万级的数据量这是一个相当不靠谱的事情,所以网上关于ibatis分页的讨论也相当的少,这也算是大家一个共识吧。

其次,对于不同的数据库它们都有自己的读取行信息的方法,例如:mysql可以通过limit n to m 来完成。oracle 可以通过 rownum > n and rownnum < m来完成等等。而对于sybase来说,它只有一个top可以控制行信息,但是当我们需要读取中间数据的时候,这个top就显得力不从心了,那么我们如何来实现分页呢??答案是:临时表。这也算是sybase特有的吧!!

书说简短,我们通过配置文件来说明!!

<!-- 导出积分对账数据-分页获取 -->

<procedureid="exportReconData"resultMap="IntegralItemResult"parameterClass="java.util.Map">

<![CDATA[

    DECLARE @start int, @limit int

    set @start= #start#

    set @limit= #count#

    if @start <=0 

       set @start=1

    if @start = 1

        begin

          select top $count$ * from 

]]>

        <dynamic>

            <includerefid="fromIntegralItem"/> 

        </dynamic>   

        order by usertimesac   

<![CDATA[

        end

    else

        begin

        DECLARE @maxrow int 

        set @maxrow = @start+@limit -1

        set rowcount @maxrow        

        select rownum=identity(12),* into tempdb..$table_tmp$ from

]]>

        <dynamic>

para_map.put("table_tmp","integral_temp_" + now_time);

            <includerefid="fromIntegralItem"/>

        </dynamic>

        order by usertime asc   

        <![CDATA[

        set rowcount 0

        select * from tempdb..$table_tmp$ where rownum >= @start

        DROP TABLE tempdb..$table_tmp$

        end 

            ]]>

    </procedure>

0 0
原创粉丝点击