Example usage for org.apache.ibatis.mapping BoundSql getSql

List of usage examples for org.apache.ibatis.mapping BoundSql getSql

Introduction

In this page you can find the example usage for org.apache.ibatis.mapping BoundSql getSql.

Prototype

public String getSql() 

Source Link

Usage

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

License:Open Source License

/**
 * ??{@link BoundSql}/*from w  w  w .  java2  s  .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.funtl.framework.smoke.core.commons.persistence.interceptor.PaginationInterceptor.java

License:Apache License

@Override
public Object intercept(Invocation invocation) throws Throwable {

    final MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];

    //        //?SQL
    ////        if (mappedStatement.getId().matches(_SQL_PATTERN)) {
    //        if (StringUtils.indexOfIgnoreCase(mappedStatement.getId(), _SQL_PATTERN) != -1) {
    Object parameter = invocation.getArgs()[1];
    BoundSql boundSql = mappedStatement.getBoundSql(parameter);
    Object parameterObject = boundSql.getParameterObject();

    //??/*from  w w w .ja v  a  2  s . com*/
    Page<Object> page = null;
    if (parameterObject != null) {
        page = convertParameter(parameterObject, page);
    }

    //
    if (page != null && page.getPageSize() != -1) {

        if (StringUtils.isBlank(boundSql.getSql())) {
            return null;
        }
        String originalSql = boundSql.getSql().trim();

        //
        page.setCount(SQLHelper.getCount(originalSql, null, mappedStatement, parameterObject, boundSql, log));

        //  ??
        String pageSql = SQLHelper.generatePageSql(originalSql, page, DIALECT);
        //                if (log.isDebugEnabled()) {
        //                    log.debug("PAGE SQL:" + StringUtils.replace(pageSql, "\n", ""));
        //                }
        invocation.getArgs()[2] = new RowBounds(RowBounds.NO_ROW_OFFSET, RowBounds.NO_ROW_LIMIT);
        BoundSql newBoundSql = new BoundSql(mappedStatement.getConfiguration(), pageSql,
                boundSql.getParameterMappings(), boundSql.getParameterObject());
        //MyBatis foreach ? start
        if (Reflections.getFieldValue(boundSql, "metaParameters") != null) {
            MetaObject mo = (MetaObject) Reflections.getFieldValue(boundSql, "metaParameters");
            Reflections.setFieldValue(newBoundSql, "metaParameters", mo);
        }
        //MyBatis foreach ? end
        MappedStatement newMs = copyFromMappedStatement(mappedStatement, new BoundSqlSqlSource(newBoundSql));

        invocation.getArgs()[0] = newMs;
    }
    //        }
    return invocation.proceed();
}

From source file:com.funtl.framework.smoke.core.commons.persistence.interceptor.PreparePaginationInterceptor.java

License:Apache License

@Override
public Object intercept(Invocation ivk) throws Throwable {
    if (ivk.getTarget().getClass().isAssignableFrom(RoutingStatementHandler.class)) {
        final RoutingStatementHandler statementHandler = (RoutingStatementHandler) ivk.getTarget();
        final BaseStatementHandler delegate = (BaseStatementHandler) Reflections.getFieldValue(statementHandler,
                DELEGATE);//from  w  w w . ja  v  a 2 s  . c  o  m
        final MappedStatement mappedStatement = (MappedStatement) Reflections.getFieldValue(delegate,
                MAPPED_STATEMENT);

        //            //?SQL
        ////            if (mappedStatement.getId().matches(_SQL_PATTERN)) {
        //            if (StringUtils.indexOfIgnoreCase(mappedStatement.getId(), _SQL_PATTERN) != -1) {
        BoundSql boundSql = delegate.getBoundSql();
        //SQL<select>parameterType??Mapper??,??
        Object parameterObject = boundSql.getParameterObject();
        if (parameterObject == null) {
            log.error("?");
            throw new NullPointerException("parameterObject?");
        } else {
            final Connection connection = (Connection) ivk.getArgs()[0];
            final String sql = boundSql.getSql();
            //
            final int count = SQLHelper.getCount(sql, connection, mappedStatement, parameterObject, boundSql,
                    log);
            Page<Object> page = null;
            page = convertParameter(parameterObject, page);
            page.setCount(count);
            String pagingSql = SQLHelper.generatePageSql(sql, page, DIALECT);
            if (log.isDebugEnabled()) {
                log.debug("PAGE SQL:" + pagingSql);
            }
            //sql???BoundSql.
            Reflections.setFieldValue(boundSql, "sql", pagingSql);
        }

        if (boundSql.getSql() == null || "".equals(boundSql.getSql())) {
            return null;
        }

    }
    //        }
    return ivk.proceed();
}

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  ww.  jav a2s.co 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.pagehelper.dialect.AbstractDialect.java

License:Open Source License

@Override
public String getCountSql(MappedStatement ms, BoundSql boundSql, Object parameterObject, RowBounds rowBounds,
        CacheKey countKey) {// ww w . j  a  va2 s  .com
    return countSqlParser.getSmartCountSql(boundSql.getSql());
}

From source file:com.github.pagehelper.dialect.AbstractHelperDialect.java

License:Open Source License

@Override
public String getPageSql(MappedStatement ms, BoundSql boundSql, Object parameterObject, RowBounds rowBounds,
        CacheKey pageKey) {//from w  w w  . j  a va 2s  .c o  m
    String sql = boundSql.getSql();
    Page page = getLocalPage();
    return getPageSql(sql, page, pageKey);
}

From source file:com.github.pagehelper.dialect.AbstractRowBoundsDialect.java

License:Open Source License

@Override
public String getPageSql(MappedStatement ms, BoundSql boundSql, Object parameterObject, RowBounds rowBounds,
        CacheKey pageKey) {//from  w ww  .  ja v  a 2  s.  c o m
    String sql = boundSql.getSql();
    return getPageSql(sql, rowBounds, pageKey);
}

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

License:Open Source License

@Override
public String getCountSql(MappedStatement ms, BoundSql boundSql, Object parameterObject, RowBounds rowBounds,
        CacheKey countKey) {/*from w w w . j  a  v a2 s.c o  m*/
    String sql = boundSql.getSql();
    String cacheSql = CACHE_COUNTSQL.get(sql);
    if (cacheSql != null) {
        return cacheSql;
    } else {
        cacheSql = sql;
    }
    cacheSql = cacheSql.replaceAll("((?i)with\\s*\\(nolock\\))", WITHNOLOCK);
    cacheSql = countSqlParser.getSmartCountSql(cacheSql);
    cacheSql = cacheSql.replaceAll(WITHNOLOCK, " with(nolock)");
    CACHE_COUNTSQL.put(sql, cacheSql);
    return cacheSql;
}

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

License:Open Source License

@Override
public String getCountSql(MappedStatement ms, BoundSql boundSql, Object parameterObject, RowBounds rowBounds,
        CacheKey countKey) {//from w w  w . ja  v a2 s . c  om
    String sql = boundSql.getSql();
    sql = sql.replaceAll("((?i)with\\s*\\(nolock\\))", WITHNOLOCK);
    sql = countSqlParser.getSmartCountSql(sql);
    sql = sql.replaceAll(WITHNOLOCK, " with(nolock)");
    return sql;
}

From source file:com.glaf.core.entity.mybatis.MyBatisOffsetLimitInterceptor.java

License:Apache License

void processIntercept(final Object[] queryArgs) {
    // queryArgs = query(MappedStatement ms, Object parameter, RowBounds
    // rowBounds, ResultHandler resultHandler)
    MappedStatement ms = (MappedStatement) queryArgs[MAPPED_STATEMENT_INDEX];
    Object parameter = queryArgs[PARAMETER_INDEX];
    final RowBounds rowBounds = (RowBounds) queryArgs[ROWBOUNDS_INDEX];
    int offset = rowBounds.getOffset();
    int limit = rowBounds.getLimit();

    String currentSystemName = Environment.getCurrentSystemName();
    Dialect dialect = null;/*  ww  w  .  j  a v a 2 s. c  o  m*/
    if (conf.getBoolean("useDatabaseDialect", true)) {
        if (dialects.isEmpty()) {
            Map<String, Dialect> rows = DBConfiguration.getDatabaseDialects();
            Iterator<Entry<String, Dialect>> iterator = rows.entrySet().iterator();
            while (iterator.hasNext()) {
                Entry<String, Dialect> entry = iterator.next();
                String key = (String) entry.getKey();
                Dialect d = entry.getValue();
                dialects.put(key, d);
            }
        }
        logger.debug("currentSystemName:" + currentSystemName);
        dialect = dialects.get(currentSystemName);
    }
    if (dialect != null && dialect.supportsLimit()
            && (offset != RowBounds.NO_ROW_OFFSET || limit != RowBounds.NO_ROW_LIMIT)) {
        logger.debug("dialect:" + dialect.getClass().getName());
        BoundSql boundSql = ms.getBoundSql(parameter);
        String sql = boundSql.getSql().trim();
        if (dialect.supportsLimit()) {
            sql = dialect.getLimitString(sql, offset, limit);
            offset = RowBounds.NO_ROW_OFFSET;
        } else {
            sql = dialect.getLimitString(sql, 0, limit);
        }
        limit = RowBounds.NO_ROW_LIMIT;

        queryArgs[ROWBOUNDS_INDEX] = new RowBounds(offset, limit);

        BoundSql newBoundSql = copyFromBoundSql(ms, boundSql, sql);

        MappedStatement newMs = copyFromMappedStatement(ms, new BoundSqlSqlSource(newBoundSql));
        queryArgs[MAPPED_STATEMENT_INDEX] = newMs;
        if (logger.isDebugEnabled()) {
            String sql2 = newBoundSql.getSql();
            SQLFormatter f = new SQLFormatter();
            sql2 = f.format(sql2);
            logger.debug("limit sql:\n" + sql2);
        }
    }
}