MyBatis 实现 Oracle 分页
< 是 <
<= 是 <=
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.CarMapper">
<select id="selectByPage" resultType="car">
select * from (
select t1.*, rownum rownu from CAR t1
where rownum <= #{ param1 } * #{ param2 }
) t2
where t2.rownu > ( #{ param1 } - 1 ) * #{ param2 }
</select>
</mapper>
---------------------------------
代码生成 sql 就这样:
// 将 sql 合成 分页的 oracle sql
StringBuffer pageSql = new StringBuffer();
pageSql.append( "select * from ( select rowTemp.*, rownum rownumTemp from ( " );
pageSql.append( sql );
pageSql.append( " ) rowTemp ) where rownumTemp > "
+ startRow + " and rownumTemp <= " + ( startRow + pageSize ) );
--------------------------------------
如果是用 hibernate 或 jpa 操作 oracle 数据库,就不用自己去拼写这些分页的 sql,
直接用 setFirstResult( int offset ) 和 setMaxResults( int limit ) 这两句就能自动获取分页的数据