com.github.pagehelper.dialect.AbstractHelperDialect#getPageSql(java.lang.String, com.github.pagehelper.Page, org.apache.ibatis.cache.CacheKey)
这个方法是获取分页SQL的抽象方法,下面是摘抄的实现方法
MySQL:
public String getPageSql(String sql, Page page, CacheKey pageKey) {
StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14);
sqlBuilder.append(sql);
if (page.getStartRow() == 0) {
sqlBuilder.append(" LIMIT ? ");
} else {
sqlBuilder.append(" LIMIT ?, ? ");
}
pageKey.update(page.getPageSize());
return sqlBuilder.toString();
}
Oracle:
public String getPageSql(String sql, Page page, CacheKey pageKey) {
StringBuilder sqlBuilder = new StringBuilder(sql.length() + 120);
if (page.getStartRow() > 0) {
sqlBuilder.append("SELECT * FROM ( ");
}
if (page.getEndRow() > 0) {
sqlBuilder.append(" SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM ( ");
}
sqlBuilder.append(sql);
if (page.getEndRow() > 0) {
sqlBuilder.append(" ) TMP_PAGE WHERE ROWNUM <= ? ");
}
if (page.getStartRow() > 0) {
sqlBuilder.append(" ) WHERE ROW_ID > ? ");
}
return sqlBuilder.toString();
}
SQLServer2012:
public String getPageSql(String sql, Page page, CacheKey pageKey) {
StringBuilder sqlBuilder = new StringBuilder(sql.length() + 64);
sqlBuilder.append(sql);
sqlBuilder.append(" OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ");
pageKey.update(page.getPageSize());
return sqlBuilder.toString();
}
SQLServer:
先解析再生成分页SQL(处理的比较复杂)
Db2:
public String getPageSql(String sql, Page page, CacheKey pageKey) {
StringBuilder sqlBuilder = new StringBuilder(sql.length() + 140);
sqlBuilder.append("SELECT * FROM (SELECT TMP_PAGE.*,ROWNUMBER() OVER() AS ROW_ID FROM ( ");
sqlBuilder.append(sql);
sqlBuilder.append(" ) AS TMP_PAGE) TMP_PAGE WHERE ROW_ID BETWEEN ? AND ?");
return sqlBuilder.toString();
}
Hsqldb:
public String getPageSql(String sql, Page page, CacheKey pageKey) {
StringBuilder sqlBuilder = new StringBuilder(sql.length() + 20);
sqlBuilder.append(sql);
if (page.getPageSize() > 0) {
sqlBuilder.append(" LIMIT ? ");
}
if (page.getStartRow() > 0) {
sqlBuilder.append(" OFFSET ? ");
}
return sqlBuilder.toString();
}
Informix:
public String getPageSql(String sql, Page page, CacheKey pageKey) {
StringBuilder sqlBuilder = new StringBuilder(sql.length() + 40);
sqlBuilder.append("SELECT ");
if (page.getStartRow() > 0) {
sqlBuilder.append(" SKIP ? ");
}
if (page.getPageSize() > 0) {
sqlBuilder.append(" FIRST ? ");
}
sqlBuilder.append(" * FROM ( ");
sqlBuilder.append(sql);
sqlBuilder.append(" ) TEMP_T ");
return sqlBuilder.toString();
}