Spring Data JPA提供了Pageable和Sorting功能。对于像 MySQL 这样的其他 DBMS,它们本身有“limit”和“offset”函数来为 Spring 提供 SQL 级别的分页。我想知道 Spring Data JPA 如何处理 Oracle 数据库的分页,因为 Oracle 没有相同的功能。 请让我知道在Spring的源代码中哪里可以找到这样的实现。实现会不会有性能问题?
最佳答案
来自 Hibernate 的 Github 存储库,OracleDialect.java :
@Override
public String getLimitString(String sql, boolean hasOffset) {
sql = sql.trim();
boolean isForUpdate = false;
if ( sql.toLowerCase(Locale.ROOT).endsWith( " for update" ) ) {
sql = sql.substring( 0, sql.length()-11 );
isForUpdate = true;
}
final StringBuilder pagingSelect = new StringBuilder( sql.length()+100 );
if (hasOffset) {
pagingSelect.append( "select * from ( select row_.*, rownum rownum_ from ( " );
}
else {
pagingSelect.append( "select * from ( " );
}
pagingSelect.append( sql );
if (hasOffset) {
pagingSelect.append( " ) row_ ) where rownum_ <= ? and rownum_ > ?" );
}
else {
pagingSelect.append( " ) where rownum <= ?" );
}
if ( isForUpdate ) {
pagingSelect.append( " for update" );
}
return pagingSelect.toString();
}
关于oracle - 由于oracle没有像MySQL一样提供 "limit"和 "offset"函数,Spring Data JPA如何实现与oracle数据库的分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45543444/