JFinal的OracleDialect.java,使用的分页方法:
public String forPaginate(int pageNumber, int pageSize, String select, String sqlExceptSelect) {
int start = (pageNumber - 1) * pageSize;
int end = pageNumber * pageSize;
StringBuilder ret = new StringBuilder();
ret.append("select * from ( select row_.*, rownum rownum_ from ( ");
ret.append(select).append(" ").append(sqlExceptSelect);
ret.append(" ) row_ where rownum <= ").append(end).append(") table_alias");
ret.append(" where table_alias.rownum_ > ").append(start);
return ret.toString();
}
//转换出来就是如下的分页方法,但这样的分页方法如果是单表查询不会出错,如果是多表查询就会有排序错乱的问题。
SELECT *
FROM (
SELECT ROW_.*, ROWNUM ROWNUM_
FROM (SELECT * FROM SYS_USER B ORDER BY B.ID) ROW_
WHERE ROWNUM <= 20
) TABLE_ALIAS
WHERE TABLE_ALIAS.ROWNUM_ > 10;
//有一篇博文是这样写的:
http://www.cnblogs.com/zhouxunyu/p/3919783.html
//我录了一个实际测试的视频,也反应jfinal的分页方法有排序错乱问题。
http://pan.baidu.com/s/1gfDbCbD