首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >既然oracle没有提供像MySQL那样的“限制”和“偏移”功能,Spring Data JPA如何在oracle数据库中实现分页?

既然oracle没有提供像MySQL那样的“限制”和“偏移”功能,Spring Data JPA如何在oracle数据库中实现分页?
EN

Stack Overflow用户
提问于 2017-08-07 17:21:31
回答 1查看 2.3K关注 0票数 1

Spring Data JPA提供了可分页和排序功能。对于像MySQL这样的其他数据库管理系统,它们自己也有"limit“和"offset”函数来为Spring提供SQL级分页。我想知道Spring Data JPA是如何处理Oracle数据库的分页的,因为Oracle没有相同的功能。请让我知道在Spring的源代码中哪里可以找到这样的实现。实现会有性能问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-07 22:52:55

来自Hibernate的Github repo,OracleDialect.java

代码语言:javascript
复制
@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();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45543444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档