最近用Oracle数据库做开发,因为以前没有用过,碰到了很多问题,这里写下自己做Oracle分页的经过,防止以 后忘记.
一 首先用Oracle写分页应当知道Oracles数据库rownum属性,rownum是伪列,是oracle自动添加的,假设rownum>2,他会从第一条开始检索,他会查到rownum=1不满足条件,于是被抛弃,然后继续找第二条
但是,第一条已经被抛弃,在找第二条时,Oracle会把第二条的rownum设置为1,在判断第二条是否满
足条件,同样不满足,于是就发生了死循环一样的判断,最终返回空,所以在伪列的判断中不可以有>,
>=,=这些符号存在.
解决的方法:
先查询并为每条数据分配rownum,是rownum真是存在于表中,然后在去查询
select * from (select u.*,rownum rn from t_user u where ....) us where us.rn>0 and us.rn<=2
这样就可以进行查询了.
二丶对easyUI传递的数据进行处理
easyUI分页组件会给后台传递两个参数,分别是page(当前页)和rows(每页显示的条数)
这是我们就要利用这两个参数对我们的sql进行处理:
在方法中进行处理
HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("page", (page*rows-rows)); map.put("rows", (page*rows));
select * from (select u.*,rownum rn from t_user u where ......) us where us.rn>#{page} and us.rn<=#{rows}
三丶mybatis中特殊符号的处理
如果将上述代码写道mybatis中会直接报错,因为mybatis在发送sql时会先进行编译,而< ,>,<=,>=这些符号不能被编译,所以我们应该用转义符号来代替
一些常用的转义符号
< <
> >
<> <>
& &
' '
" "
还有一种方法是用<![CDATA[写你的sql语句 ]]>进行说明在这个符号中的代码不会进行编译,直接发送
所以写法就变成了这样
select * from (select u.*,rownum rn from t_user u where .....) us where us.rn<![CDATA[>]]>#{page} and us.rn<![CDATA[<=]]>#{rows}
希望能帮助到看到的你
如何用easyUI做Oracle的分页
最新推荐文章于 2021-07-01 22:03:55 发布