Example usage for org.apache.ibatis.cache CacheKey update

List of usage examples for org.apache.ibatis.cache CacheKey update

Introduction

In this page you can find the example usage for org.apache.ibatis.cache CacheKey update.

Prototype

public void update(Object object) 

Source Link

Usage

From source file:com.badminton.interceptors.mySqlHelper.pagehelper.util.SqlUtil.java

License:Open Source License

/**
 * //  ww  w.  j  a va 2 s  . c om
 *
 * @param invocation
 * @return
 * @throws Throwable
 */
public Object doIntercept(Invocation invocation) throws Throwable {
    //??
    Object[] args = invocation.getArgs();
    MappedStatement ms = (MappedStatement) args[0];
    Object parameterObject = args[1];
    RowBounds rowBounds = (RowBounds) args[2];
    List resultList;
    if (autoDialect) {
        lock.lock();
        try {
            if (autoDialect) {
                autoDialect = false;
                this.dialect = getDialect(ms);
            }
        } finally {
            lock.unlock();
        }
    }
    Dialect runtimeDialect = dialect;
    if (autoRuntimeDialect) {
        runtimeDialect = getDialect(ms);
    }
    //????
    if (!runtimeDialect.skip(ms, parameterObject, rowBounds)) {
        ResultHandler resultHandler = (ResultHandler) args[3];
        //?
        Executor executor = (Executor) invocation.getTarget();
        BoundSql boundSql = ms.getBoundSql(parameterObject);
        //?????
        Map<String, Object> additionalParameters = (Map<String, Object>) additionalParametersField
                .get(boundSql);
        //?? count 
        if (runtimeDialect.beforeCount(ms, parameterObject, rowBounds)) {
            // count  key
            CacheKey countKey = executor.createCacheKey(ms, parameterObject, RowBounds.DEFAULT, boundSql);
            countKey.update("_Count");
            MappedStatement countMs = msCountMap.get(countKey);
            if (countMs == null) {
                //?? ms  Long  ms
                countMs = MSUtils.newCountMappedStatement(ms);
                msCountMap.put(countKey, countMs);
            }
            //? count sql
            String countSql = runtimeDialect.getCountSql(ms, boundSql, parameterObject, rowBounds, countKey);
            BoundSql countBoundSql = new BoundSql(ms.getConfiguration(), countSql,
                    boundSql.getParameterMappings(), parameterObject);
            //? SQL ???? BoundSql 
            for (String key : additionalParameters.keySet()) {
                countBoundSql.setAdditionalParameter(key, additionalParameters.get(key));
            }
            // count 
            Object countResultList = executor.query(countMs, parameterObject, RowBounds.DEFAULT, resultHandler,
                    countKey, countBoundSql);
            Long count = (Long) ((List) countResultList).get(0);
            //?
            runtimeDialect.afterCount(count, parameterObject, rowBounds);
            if (count == 0L) {
                // 0 
                return runtimeDialect.afterPage(new ArrayList(), parameterObject, rowBounds);
            }
        }
        //??
        if (runtimeDialect.beforePage(ms, parameterObject, rowBounds)) {
            //? key
            CacheKey pageKey = executor.createCacheKey(ms, parameterObject, rowBounds, boundSql);
            //??
            parameterObject = runtimeDialect.processParameterObject(ms, parameterObject, boundSql, pageKey);
            //? sql
            String pageSql = runtimeDialect.getPageSql(ms, boundSql, parameterObject, rowBounds, pageKey);
            BoundSql pageBoundSql = new BoundSql(ms.getConfiguration(), pageSql,
                    boundSql.getParameterMappings(), parameterObject);
            //??
            for (String key : additionalParameters.keySet()) {
                pageBoundSql.setAdditionalParameter(key, additionalParameters.get(key));
            }
            //
            resultList = executor.query(ms, parameterObject, RowBounds.DEFAULT, resultHandler, pageKey,
                    pageBoundSql);
        } else {
            resultList = new ArrayList();
        }
    } else {
        args[2] = RowBounds.DEFAULT;
        resultList = (List) invocation.proceed();
    }
    //
    return runtimeDialect.afterPage(resultList, parameterObject, rowBounds);
}

From source file:com.github.pagehelper.dialect.helper.Db2Dialect.java

License:Open Source License

@Override
public String getPageSql(String sql, Page page, CacheKey pageKey) {
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 120);
    sqlBuilder.append("SELECT * FROM (SELECT TMP_PAGE.*,ROWNUMBER() OVER() AS ROW_ID FROM ( ");
    sqlBuilder.append(sql);//from  w  ww.j  a  v a  2  s . c o  m
    sqlBuilder.append(" ) AS TMP_PAGE) WHERE ROW_ID BETWEEN ");
    sqlBuilder.append(page.getStartRow() + 1);
    sqlBuilder.append(" AND ");
    sqlBuilder.append(page.getEndRow());
    pageKey.update(page.getStartRow() + 1);
    pageKey.update(page.getEndRow());
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.helper.HsqldbDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, Page page, CacheKey pageKey) {
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 20);
    sqlBuilder.append(sql);//w  w  w .ja va 2s .c om
    if (page.getPageSize() > 0) {
        sqlBuilder.append(" LIMIT ");
        sqlBuilder.append(page.getPageSize());
        pageKey.update(page.getPageSize());
    }
    if (page.getStartRow() > 0) {
        sqlBuilder.append(" OFFSET ");
        sqlBuilder.append(page.getStartRow());
        pageKey.update(page.getStartRow());
    }
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.helper.InformixDialect.java

License:Open Source License

@Override
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 ");
        sqlBuilder.append(page.getStartRow());
        pageKey.update(page.getStartRow());
    }/*from   w w  w.j a v a  2 s  .co m*/
    if (page.getPageSize() > 0) {
        sqlBuilder.append(" FIRST ");
        sqlBuilder.append(page.getPageSize());
        pageKey.update(page.getPageSize());
    }
    sqlBuilder.append(" * FROM ( ");
    sqlBuilder.append(sql);
    sqlBuilder.append(" ) TEMP_T");
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.helper.MySqlDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, Page page, CacheKey pageKey) {
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14);
    sqlBuilder.append(sql);/*w  ww. j  a va 2  s  .  c  om*/
    if (page.getStartRow() == 0) {
        sqlBuilder.append(" LIMIT ");
        sqlBuilder.append(page.getPageSize());
    } else {
        sqlBuilder.append(" LIMIT ");
        sqlBuilder.append(page.getStartRow());
        sqlBuilder.append(",");
        sqlBuilder.append(page.getPageSize());
        pageKey.update(page.getStartRow());
    }
    pageKey.update(page.getPageSize());
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.helper.OracleDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, Page page, CacheKey pageKey) {
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 120);
    if (page.getStartRow() > 0) {
        sqlBuilder.append("SELECT * FROM ( ");
    }//from  w  ww. j ava2 s.c  o  m
    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 <= ");
        sqlBuilder.append(page.getEndRow());
        pageKey.update(page.getEndRow());
    }
    if (page.getStartRow() > 0) {
        sqlBuilder.append(" ) WHERE ROW_ID > ");
        sqlBuilder.append(page.getStartRow());
        pageKey.update(page.getStartRow());
    }
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.helper.SqlServer2012Dialect.java

License:Open Source License

@Override
public String getPageSql(String sql, Page page, CacheKey pageKey) {
    StringBuilder sqlBuilder = new StringBuilder(sql.length() + 14);
    sqlBuilder.append(sql);/*from  w ww  . j av a  2  s  .com*/
    if (page.getStartRow() > 0) {
        sqlBuilder.append(" OFFSET ");
        sqlBuilder.append(page.getStartRow());
        sqlBuilder.append(" ROWS ");
        pageKey.update(page.getStartRow());
    }
    if (page.getPageSize() > 0) {
        sqlBuilder.append(" FETCH NEXT ");
        sqlBuilder.append(page.getPageSize());
        sqlBuilder.append(" ROWS ONLY");
        pageKey.update(page.getPageSize());
    }
    return sqlBuilder.toString();
}

From source file:com.github.pagehelper.dialect.helper.SqlServerDialect.java

License:Open Source License

@Override
public String getPageSql(String sql, Page page, CacheKey pageKey) {
    //?pageKey/*from   ww  w .j a va2 s . co m*/
    pageKey.update(page.getStartRow());
    pageKey.update(page.getPageSize());
    String cacheSql = CACHE_PAGESQL.get(sql);
    if (cacheSql == null) {
        cacheSql = sql;
        cacheSql = cacheSql.replaceAll("((?i)with\\s*\\(nolock\\))", WITHNOLOCK);
        cacheSql = pageSql.convertToPageSql(cacheSql, null, null);
        cacheSql = cacheSql.replaceAll(WITHNOLOCK, " with(nolock)");
        CACHE_PAGESQL.put(sql, cacheSql);
    }
    cacheSql = cacheSql.replace(String.valueOf(Long.MIN_VALUE), String.valueOf(page.getStartRow()));
    cacheSql = cacheSql.replace(String.valueOf(Long.MAX_VALUE), String.valueOf(page.getPageSize()));
    return cacheSql;
}

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);/*from w ww.  j  a  va  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 ww.  ja v a 2s  . com*/
    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();
}