以Student表为例进行分页

建表及插入

 -- 有表结构如下
create table STUDENT
(
sno INTEGER,
sname VARCHAR2(100),
sage INTEGER
); -- 插入数据
insert into student (SNO, SNAME, SAGE) values (19, 'Bob', 39); insert into student (SNO, SNAME, SAGE) values (15, 'Bob', 35); insert into student (SNO, SNAME, SAGE) values (3, 'Bob', 23); insert into student (SNO, SNAME, SAGE) values (11, 'Bob', 31); insert into student (SNO, SNAME, SAGE) values (7, 'Bob', 27); insert into student (SNO, SNAME, SAGE) values (6, 'Kite', 26); insert into student (SNO, SNAME, SAGE) values (2, 'Kite', 22); insert into student (SNO, SNAME, SAGE) values (18, 'Kite', 38); insert into student (SNO, SNAME, SAGE) values (14, 'Kite', 34); insert into student (SNO, SNAME, SAGE) values (10, 'Kite', 30); insert into student (SNO, SNAME, SAGE) values (4, 'Mike', 24); insert into student (SNO, SNAME, SAGE) values (12, 'Mike', 32); insert into student (SNO, SNAME, SAGE) values (16, 'Mike', 36); insert into student (SNO, SNAME, SAGE) values (8, 'Mike', 28); insert into student (SNO, SNAME, SAGE) values (20, 'Mike', 40); insert into student (SNO, SNAME, SAGE) values (5, 'T&%T', 25); insert into student (SNO, SNAME, SAGE) values (17, 'T&%T', 37); insert into student (SNO, SNAME, SAGE) values (9, 'T&%T', 29); insert into student (SNO, SNAME, SAGE) values (21, 'T&%T', 41); insert into student (SNO, SNAME, SAGE) values (1, 'T&%T', 21); insert into student (SNO, SNAME, SAGE) values (13, 'T&%T', 33);

表内容

纯sql分页

 SELECT * FROM (
SELECT ROWNUM RN,A.* FROM (
SELECT *
FROM STUDENT ORDER BY SNAME ASC
)A WHERE ROWNUM <= 20 )
WHERE RN >=11;

mybatis分页

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="student">
<typeAlias alias="Student" type="com.bobo.code.model.Student" />
<select id="select" resultClass="Student">
SELECT * FROM
(
SELECT A.*,ROWNUM RN FROM
(SELECT * FROM STUDENT) A
WHERE <![CDATA[ ROWNUM <= #maxRowNum#]]>
)
WHERE <![CDATA[RN >= #minRowNum#]]>
</select> <select id="count" resultClass="java.lang.Integer">
SELECT count(*) FROM STUDENT
</select> </sqlMap>

  

		queryMap.put("minRowNum", (pageNumber - 1)*Pager.DEFAULT_PAGE_SIZE +1);//oracle rownum起
queryMap.put("maxRowNum", pageNumber * Pager.DEFAULT_PAGE_SIZE );//oracle rownum止

为何一定要用3层select分析:

3层时sql分页语句:

SELECT *
FROM (SELECT ROWNUM RN, A.*
FROM (SELECT * FROM STUDENT ORDER BY SNO ASC) A
WHERE ROWNUM <= 10)
WHERE RN >= 1;

3层时图解查询顺序:

2层时sql语句:

SELECT *
FROM (SELECT ROWNUM RN, A.*
FROM STUDENT A
WHERE ROWNUM <= 10
ORDER BY SNO ASC)
WHERE RN >= 1;

2层时图解查询顺序:

开发过程异常

无法转换为内部表示

当Student的属性id 为Integer,和数据库中的字段ID为VARCHAR2 导致不对应会取不出数据,报错(无法转换为内部表示):

如果sql语句错误,比如多了一个逗号之类的,会报错(ORA-00936):

最新文章

  1. 利用navicat创建存储过程、触发器和使用游标的简单实例
  2. svg技术(可缩放矢量图形)介绍
  3. 转:db2 iptables相关用法(1)
  4. 【优先队列】HDU 1873——看病找医生
  5. 在win7上建立本地FTP站点详细步骤
  6. 转:PHP超时处理全面总结
  7. zabbix监控代理zabbix-proxy
  8. MySQL几种方法的数据库备份
  9. 浅谈 zookeeper 原理,安装和配置
  10. php七牛批量删除空间内的所有文件方法
  11. Vue 2.0基础语法:系统指令
  12. node的第一步,hello,以及小技巧和CPU使用情况。到底能用几个核心?
  13. gitignore不起作用
  14. 分组ntile
  15. xbee PRO S2C的多固件烧写
  16. Spring框架IOC和AOP的实现原理
  17. 对请求并发数做限制的通用RequestDecorator
  18. Node.js中环境变量process.env详解
  19. PHP 过滤特殊符号
  20. 剑指offer十九之顺时针打印矩阵

热门文章

  1. Inversion of Control Containers and the Dependency Injection pattern(转)
  2. Oracle学习笔记(一)
  3. Mustache 使用心得总结
  4. [系统设计/开发] APP密钥签发服务器
  5. 【MySQL】InnoDB日志机制深入分析
  6. xml与json 介绍
  7. AX Dynamic 2012 SSRS 按行数分页
  8. nginx/Windows-1.9.3启动脚本
  9. Quartus II中FPGA的管脚分配保存方法
  10. 压测 linux + jexus + mono + asp.net mvc