一个数据库分页语句及ibatis下的一个使用构想
2012-05-15 09:40
211 查看
先抄一个数据库分页语句。来自《面向程序员的数据库优化方案》:
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>。最后这个分页语句肯定长的不得了。这也是个大问题。
==========================================
由于最近比较忙乱,这个构想迟迟没能进行试验。“君子欲讷言敏行”,今儿我当小人了……
本文出自 “编程的摩羯男” 博客,请务必保留此出处http://winters1224.blog.51cto.com/3021203/863635
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>。最后这个分页语句肯定长的不得了。这也是个大问题。
==========================================
由于最近比较忙乱,这个构想迟迟没能进行试验。“君子欲讷言敏行”,今儿我当小人了……
本文出自 “编程的摩羯男” 博客,请务必保留此出处http://winters1224.blog.51cto.com/3021203/863635
相关文章推荐
- 课后作业11--使用SQL语句创建一个数据库
- MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适
- 使用数据库存储过程完成一个简单分页
- 使用SQL语句从数据库一个表中随机获取数据
- 使用SQL语句从数据库一个表中随机获取数据
- 使用 SQL 语句从数据库一个表中随机获取一些数据
- 一个使用ibatis对数据库增删改查的例子
- 数据库分页语句使用
- 使用 SQL 语句从数据库一个表中随机获取一些数据
- mybatis的分页插件pagehelper-fix使用、数据库分页查询模板sql、总结mysql与oracle语句的区别
- 一条语句返回一个数据库中所有表的空间使用情况
- 使用SQL语句从数据库一个表中随机获取数据
- 使用 SQL 语句从数据库一个表中随机获取一些数据
- 使用SQL语句从数据库一个表中随机获取数据
- 使用 SQL 语句从数据库一个表中随机获取一些数据
- 使用SQL语句从数据库一个表中随机获取数据
- IBatis 中使用关键字with 报错如果此语句是共用表达式或xmlnamespace字句,那么前一个语句必须以分号结尾
- 分页存储的一个类(使用sql server 2000数据库测试通过)
- 请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。
- 统计一个数据库中,无记录的表的sql语句