WEB开发网
开发学院软件开发Java 一个数据库分页语句及ibatis下的一个使用构想 阅读

一个数据库分页语句及ibatis下的一个使用构想

 2012-05-15 10:43:12 来源:WEB开发网   
核心提示:select d.*, rownum rn from ( select a.seqNo,a.flag from T_ATIP_PROGRAMPARAMETER t where t.up
select d.*,
       rownum rn
       from
        (
            select a.seqNo,a.flag
            from T_ATIP_PROGRAMPARAMETER t
            where 
                t.upperprolevel ='01'
                and t.proLevel ='1'
            order by t.seqNo) a
       where rownum  < #endIndex# ) d 
where rn >= #startIndex#

其中:
select a.seqNo,a.flag
            from T_ATIP_PROGRAMPARAMETER t
            where 
                t.upperprolevel ='01'
                and t.proLevel ='1'
            order by t.seqNo

是实际的数据查询语句。其它部分是进行分页的语句。

在ibatis下,我想,是不是可以这样使用:

<select id="selectPagedList" parameterClass="PageInfo"
        resultClass="Object">
select d.*,
       rownum rn
       from
        (
            <isEqual property="realSql" compareValue="realSqlId">
               <include refid="realSqlId"/>
            </isEqual>
) a
       where rownum  < #endIndex# ) d 
where rn >= #startIndex#
</select>

<select id="realSqlId" parameterClass="SubPageInfo"
        resultClass="SubPageInfo">
select a.seqNo,a.flag
            from T_ATIP_PROGRAMPARAMETER t
            where 
                t.upperprolevel ='01'
                and t.proLevel ='1'
            order by t.seqNo
</select>

其中,PageInfo是一个接口,其中包含realSql、endIndex、startIndex三个属性。SubPageInfo是PageInfo的一个子类,还包含seqNo、flag这两个属性。

==========================================

这个构想的基本思路是,分页sql里除了实际查询语句之外,其它的都是公用代码。因此,把公用代码用一个接口封装起来;同时,接口指出了非公用的实际查询语句,只不过需要由子类来实现。

子类则可以专注于实际查询语句所需的参数、返回值。

可能会有两个问题:ibatis会对sql语句和参数、返回值的属性进行校验。不知道这个写法能不能通过这个校验。

另外,按这种写法,每增加一个分页需求,就要多写一个

<isEqual property="realSql" compareValue="realSqlId">
     <include refid="realSqlId"/>
</isEqual>

Tags:一个 数据库 语句

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接