Spring Data JPA提供了可分页和排序功能。对于像MySQL这样的其他数据库管理系统,它们自己也有"limit“和"offset”函数来为Spring提供SQL级分页。我想知道Spring Data JPA是如何处理Oracle数据库的分页的,因为Oracle没有相同的功能。请让我知道在Spring的源代码中哪里可以找到这样的实现。实现会有性能问题吗?
发布于 2017-08-07 22:52:55
来自Hibernate的Github repo,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();
}https://stackoverflow.com/questions/45543444
复制相似问题