package com.shtao.ext.ibatis.common.util; import org.apache.log4j.Logger; public class OraclePaginator implements Paginator { private static Logger log = Logger.getLogger(OraclePaginator.class); @Override public String getPaginatedListSql(String sql, int pageNo, int pageSize) { if (pageNo <= 0 || pageSize <= 0) return sql; int start = pageSize * (pageNo - 1); int end = pageSize * pageNo; /** * Oracle的分页 */ StringBuffer pageStr = new StringBuffer(); pageStr.append("select * from ( select row_.*, rownum rownum_ from ("); pageStr.append(sql); pageStr.append(" ) row_ where rownum <= "); pageStr.append(end); pageStr.append(" ) where rownum_ > "); pageStr.append(start); log.debug(pageStr); return pageStr.toString(); } @Override public String getPaginatedCountSql(String sql) { int fromIndex = sql.toLowerCase().indexOf("from"); StringBuffer countStr = new StringBuffer("select count(*) "); int sql_orderby = sql.toLowerCase().indexOf("order by"); if (sql_orderby > 0) { countStr.append(sql.substring(fromIndex, sql_orderby)); } else { countStr.append(sql.substring(fromIndex)); } String tempStr = countStr.toString(); log.debug(tempStr); return tempStr; } }