Example usage for org.apache.ibatis.session RowBounds getOffset

List of usage examples for org.apache.ibatis.session RowBounds getOffset

Introduction

In this page you can find the example usage for org.apache.ibatis.session RowBounds getOffset.

Prototype

public int getOffset() 

Source Link

Usage

From source file:com.ewcms.common.mybatis.plugin.PaginationQueryPlugin.java

License:Open Source License

/**
 * ??{@link BoundSql}//from w  ww  .  j a v  a2s .  c o m
 * 
 * @param BoundSql  
 * @param rowBounds 
 */
private void setPagination(BoundSql boundSql, RowBounds rowBounds) {
    String sql = dialect.limit(boundSql.getSql(), rowBounds.getOffset(), rowBounds.getLimit());
    MetaObject.forObject(boundSql).setValue("sql", sql);
    logger.debug("BoundSql sql is {}", boundSql.getSql());
}

From source file:com.github.ibole.infrastructure.persistence.db.mybatis.pagination.PaginationInterceptor.java

License:Apache License

@SuppressWarnings({ "rawtypes", "unchecked" })
public Object intercept(Invocation invocation) throws Throwable {
    Object[] queryArgs = invocation.getArgs();
    MappedStatement ms = (MappedStatement) queryArgs[MAPPED_STATEMENT_INDEX];
    Object parameter = queryArgs[PARAMETER_INDEX];
    final RowBounds oldRow = (RowBounds) queryArgs[ROWBOUNDS_INDEX];
    // the need for paging intercept.
    boolean interceptor = ms.getId().matches(sqlRegex);

    if (!interceptor) {
        return invocation.proceed();
    }/*from  w w w  .j  a  v a  2  s  .c o m*/

    final Executor executor = (Executor) invocation.getTarget();
    //obtain paging information.
    final PagingCriteria pageRequest = interceptor ? PagingParametersFinder.instance.findCriteria(parameter)
            : PagingCriteria.getDefaultCriteria();

    final RowBounds rowBounds = (interceptor) ? offsetPaging(oldRow, pageRequest) : oldRow;
    int offset = rowBounds.getOffset();
    int limit = rowBounds.getLimit();
    if (dialect.supportsLimit() && (offset != RowBounds.NO_ROW_OFFSET || limit != RowBounds.NO_ROW_LIMIT)) {
        BoundSql boundSql = ms.getBoundSql(parameter);
        String sql = boundSql.getSql().trim();
        Integer count = getCount(fileterSql(sql, pageRequest), executor, ms, rowBounds, boundSql, parameter,
                dialect);
        String newSql = sortSql(fileterSql(sql, pageRequest), pageRequest);
        if (dialect.supportsLimitOffset()) {
            newSql = dialect.getLimitString(newSql, offset, limit);
            offset = RowBounds.NO_ROW_OFFSET;
        } else {
            newSql = dialect.getLimitString(newSql, 0, limit);
        }
        if (logger.isDebugEnabled()) {
            logger.debug("Pagination sql is :[" + newSql + "]");
        }
        limit = RowBounds.NO_ROW_LIMIT;
        queryArgs[ROWBOUNDS_INDEX] = new RowBounds(offset, limit);
        BoundSql newBoundSql = copyFromBoundSql(ms, boundSql, newSql);
        MappedStatement newMs = copyFromMappedStatement(ms, new BoundSqlSqlSource(newBoundSql));
        queryArgs[MAPPED_STATEMENT_INDEX] = newMs;
        return new PageList((List) invocation.proceed(),
                new Pager(pageRequest.getPageNumber(), pageRequest.getPageSize(), count));
    }

    return invocation.proceed();

}

From source file:com.github.ibole.infrastructure.persistence.db.mybatis.pagination.PaginationInterceptor.java

License:Apache License

/**
 * Set the paging information,to RowBuounds.
 *
 * @param rowBounds rowBounds./*from  w  w  w  . j  av  a2  s  .  co  m*/
 * @return rowBounds.
 */
private RowBounds offsetPaging(RowBounds rowBounds, PagingCriteria pageRequest) {
    // rowBuounds has offset.
    if (rowBounds.getOffset() == RowBounds.NO_ROW_OFFSET) {
        if (pageRequest != null) {
            return new RowBounds(dialect.getFirst(pageRequest.getPageNumber(), pageRequest.getPageSize()),
                    pageRequest.getPageSize());
        }
    }
    return rowBounds;
}

From source file:com.github.pagehelper.dialect.rowbounds.Db2RowBoundsDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, RowBounds rowBounds, CacheKey pageKey) {
    int startRow = rowBounds.getOffset() + 1;
    int endRow = rowBounds.getOffset() + rowBounds.getLimit();
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 120);
    sqlBuilder.append("SELECT * FROM (SELECT TMP_PAGE.*,ROWNUMBER() OVER() AS ROW_ID FROM ( ");
    sqlBuilder.append(sql);//  w  w w .j ava 2  s.com
    sqlBuilder.append(" ) AS TMP_PAGE) WHERE ROW_ID BETWEEN ");
    sqlBuilder.append(startRow);
    sqlBuilder.append(" AND ");
    sqlBuilder.append(endRow);
    pageKey.update(startRow);
    pageKey.update(endRow);
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.rowbounds.HsqldbRowBoundsDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, RowBounds rowBounds, CacheKey pageKey) {
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 20);
    sqlBuilder.append(sql);//w  w  w.  ja v  a  2  s  .  c o  m
    if (rowBounds.getLimit() > 0) {
        sqlBuilder.append(" LIMIT ");
        sqlBuilder.append(rowBounds.getLimit());
        pageKey.update(rowBounds.getLimit());
    }
    if (rowBounds.getOffset() > 0) {
        sqlBuilder.append(" OFFSET ");
        sqlBuilder.append(rowBounds.getOffset());
        pageKey.update(rowBounds.getOffset());
    }
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.rowbounds.InformixRowBoundsDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, RowBounds rowBounds, CacheKey pageKey) {
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 40);
    sqlBuilder.append("SELECT ");
    if (rowBounds.getOffset() > 0) {
        sqlBuilder.append(" SKIP ");
        sqlBuilder.append(rowBounds.getOffset());
        pageKey.update(rowBounds.getOffset());
    }//  ww  w . j a va  2  s  . c om
    if (rowBounds.getLimit() > 0) {
        sqlBuilder.append(" FIRST ");
        sqlBuilder.append(rowBounds.getLimit());
        pageKey.update(rowBounds.getLimit());
    }
    sqlBuilder.append(" * FROM ( ");
    sqlBuilder.append(sql);
    sqlBuilder.append(" ) TEMP_T");
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.rowbounds.MySqlRowBoundsDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, RowBounds rowBounds, CacheKey pageKey) {
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14);
    sqlBuilder.append(sql);// w w  w  . ja  va 2  s.  c  o m
    if (rowBounds.getOffset() == 0) {
        sqlBuilder.append(" LIMIT ");
        sqlBuilder.append(rowBounds.getLimit());
    } else {
        sqlBuilder.append(" LIMIT ");
        sqlBuilder.append(rowBounds.getOffset());
        sqlBuilder.append(",");
        sqlBuilder.append(rowBounds.getLimit());
        pageKey.update(rowBounds.getOffset());
    }
    pageKey.update(rowBounds.getLimit());
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.rowbounds.OracleRowBoundsDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, RowBounds rowBounds, CacheKey pageKey) {
    int startRow = rowBounds.getOffset();
    int endRow = rowBounds.getOffset() + rowBounds.getLimit();
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 120);
    if (startRow > 0) {
        sqlBuilder.append("SELECT * FROM ( ");
    }/*from  w  w  w.  ja  v  a2s . c o m*/
    if (endRow > 0) {
        sqlBuilder.append(" SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM ( ");
    }
    sqlBuilder.append(sql);
    if (endRow > 0) {
        sqlBuilder.append(" ) TMP_PAGE WHERE ROWNUM <= ");
        sqlBuilder.append(endRow);
        pageKey.update(endRow);
    }
    if (startRow > 0) {
        sqlBuilder.append(" ) WHERE ROW_ID > ");
        sqlBuilder.append(startRow);
        pageKey.update(startRow);
    }
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.rowbounds.SqlServer2012RowBoundsDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, RowBounds rowBounds, CacheKey pageKey) {
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14);
    sqlBuilder.append(sql);/*from www.  jav  a  2  s . c  o  m*/
    if (rowBounds.getOffset() > 0) {
        sqlBuilder.append(" OFFSET ");
        sqlBuilder.append(rowBounds.getOffset());
        sqlBuilder.append(" ROWS ");
        pageKey.update(rowBounds.getOffset());
    }
    if (rowBounds.getLimit() > 0) {
        sqlBuilder.append(" FETCH NEXT ");
        sqlBuilder.append(rowBounds.getLimit());
        sqlBuilder.append(" ROWS ONLY");
        pageKey.update(rowBounds.getLimit());
    }
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.rowbounds.SqlServerRowBoundsDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, RowBounds rowBounds, CacheKey pageKey) {
    //?pageKey/*from   w  ww  .  ja  v a2  s.co m*/
    pageKey.update(rowBounds.getOffset());
    pageKey.update(rowBounds.getLimit());
    sql = sql.replaceAll("((?i)with\\s*\\(nolock\\))", WITHNOLOCK);
    sql = pageSql.convertToPageSql(sql, null, null);
    sql = sql.replaceAll(WITHNOLOCK, " with(nolock)");
    sql = sql.replace(String.valueOf(Long.MIN_VALUE), String.valueOf(rowBounds.getOffset()));
    sql = sql.replace(String.valueOf(Long.MAX_VALUE), String.valueOf(rowBounds.getLimit()));
    return sql;
}