Example usage for org.apache.ibatis.executor.statement StatementHandler getBoundSql

List of usage examples for org.apache.ibatis.executor.statement StatementHandler getBoundSql

Introduction

In this page you can find the example usage for org.apache.ibatis.executor.statement StatementHandler getBoundSql.

Prototype

BoundSql getBoundSql();

Source Link

Usage

From source file:cn.com.bricks.mybatis.rbac.DynamicRbacInterceptor.java

@Override
public Object intercept(Invocation invocation) throws Throwable {
    StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
    MetaObject metaStatementHandler = MetaObject.forObject(statementHandler, DEFAULT_OBJECT_FACTORY,
            DEFAULT_OBJECT_WRAPPER_FACTORY, DEFAULT_REFLECTOR_FACTORY);
    MappedStatement mappedStatement = (MappedStatement) metaStatementHandler
            .getValue("delegate.mappedStatement");

    // ?sql/*from  w  w  w .j  av  a 2 s  . c o  m*/
    BoundSql bsql = statementHandler.getBoundSql();
    // ?sql
    TextSqlNode sqlNode = new TextSqlNode(bsql.getSql());
    BoundSql nbsql = getBoundSql(mappedStatement.getConfiguration(), bsql.getParameterObject(), sqlNode);
    // ?sql?
    metaStatementHandler.setValue("delegate.boundSql.sql", nbsql.getSql());
    return invocation.proceed();
}

From source file:com.hj.blog.common.orm.PageInterceptor.java

License:Apache License

@Override
public Object intercept(Invocation invocation) throws Throwable {
    if (invocation.getTarget() instanceof RoutingStatementHandler) {
        RoutingStatementHandler statementHandler = (RoutingStatementHandler) invocation.getTarget();
        StatementHandler delegate = (StatementHandler) ReflectUtils.getFieldValue(statementHandler, "delegate");
        BoundSql boundSql = delegate.getBoundSql();
        Object parameterObject = boundSql.getParameterObject();
        if (!(parameterObject instanceof MapperMethod.ParamMap)) {
            return invocation.proceed();
        }/*from w  w w. j a v  a2  s . c om*/
        MapperMethod.ParamMap paramMap = (MapperMethod.ParamMap) parameterObject;
        if (!paramMap.containsKey(PAGE_PARAM_NAME)) {
            return invocation.proceed();
        }
        Object pageObject = paramMap.get(PAGE_PARAM_NAME);
        dataThreadLocal.set(pageObject);
        if (pageObject instanceof DigitalPage) {
            DigitalPage page = (DigitalPage) pageObject;
            MappedStatement mappedStatement = (MappedStatement) ReflectUtils.getFieldValue(delegate,
                    "mappedStatement");
            Connection connection = (Connection) invocation.getArgs()[0];
            String sql = boundSql.getSql();
            setTotalCount(page, parameterObject, mappedStatement, connection);
            ReflectUtils.setFieldValue(boundSql, "sql", getDigitalPageSql(page, sql));
        } else if (pageObject instanceof DropDownPage) {
            DropDownPage page = (DropDownPage) pageObject;
            String sql = boundSql.getSql();
            ReflectUtils.setFieldValue(boundSql, "sql", getDropDownPageSql(page, sql));
        }
        return invocation.proceed();
    } else if (invocation.getTarget() instanceof ResultSetHandler) {
        Object parameterObject = dataThreadLocal.get();
        dataThreadLocal.remove();
        Object data = invocation.proceed();
        if (parameterObject == null) {
            return data;
        }
        if (!(parameterObject instanceof DigitalPage) && !(parameterObject instanceof DropDownPage)) {
            return data;
        }
        Class<?> clazz = parameterObject.getClass();
        ReflectUtils.setFieldValueWithSetterMethod(parameterObject, data, clazz,
                clazz.getDeclaredField("data"));
        if (parameterObject instanceof DropDownPage) {
            List<?> dataList = (List<?>) data;
            if (!CollectionUtils.isEmpty(dataList)) {
                String[] orderColumnArray = ((DropDownPage) parameterObject).getOrderColumn().split(",");
                String orderColumn = orderColumnArray[orderColumnArray.length - 1];
                String[] orderColumnNameArray = orderColumn.split("_");
                StringBuffer stringBuffer = new StringBuffer(orderColumnNameArray[0].toLowerCase());
                for (int i = 1; i < orderColumnNameArray.length; i++) {
                    stringBuffer.append(orderColumnNameArray[i].substring(0, 1).toUpperCase());
                    if (orderColumnNameArray[i].length() > 1) {
                        stringBuffer.append(orderColumnNameArray[i].substring(1));
                    }
                }
                Object offset = ReflectUtils.getFieldValue(dataList.get(dataList.size() - 1),
                        stringBuffer.toString());
                if (ObjectUtils.isNull(offset)) {
                    throw new RuntimeException(
                            "please check the property name of " + orderColumn + " is right.");
                }
                ReflectUtils.setFieldValueWithSetterMethod(parameterObject, offset, clazz,
                        clazz.getDeclaredField("offset"));
            }
        }
        return data;
    }
    return invocation.proceed();
}

From source file:com.huang.rp.common.persistence.PageInterceptor.java

License:Apache License

/**
 * ??//from   ww w . j  a va2  s . c o m
 */

@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
@Override
public Object intercept(Invocation invocation) throws Throwable {

    RoutingStatementHandler handler = (RoutingStatementHandler) invocation.getTarget();
    StatementHandler delegate = (StatementHandler) ReflectionUtils.getFieldValue(handler, "delegate");
    BoundSql boundSql = delegate.getBoundSql();
    Object obj = boundSql.getParameterObject();
    String sqls = boundSql.getSql();

    if (obj instanceof QueryFilter) {
        QueryFilter queryFilter = (QueryFilter) obj;
        MappedStatement mappedStatement = (MappedStatement) ReflectionUtils.getFieldValue(delegate,
                "mappedStatement");

        Connection connection = (Connection) invocation.getArgs()[0];
        String sql = boundSql.getSql();
        this.setTotalRecord(queryFilter, mappedStatement, connection);
        String pageSql = this.getPageSql(queryFilter, sql);

        ReflectionUtils.setFieldValue(boundSql, "sql", pageSql);
        QueryFilter.setLocal(queryFilter);
    }
    return invocation.proceed();
}

From source file:com.luxoft.mybatis.splitter.ReusingBatchExecutor.java

License:Apache License

public int doUpdate(MappedStatement ms, Object parameterObject) throws SQLException {
    final Configuration configuration = ms.getConfiguration();
    final StatementHandler handler = configuration.newStatementHandler(this, ms, parameterObject,
            RowBounds.DEFAULT, null, null);
    final BoundSql boundSql = handler.getBoundSql();
    PreparedStatementKey key = new PreparedStatementKey(boundSql.getSql(), ms);
    StatementData statementData = statementsData.get(key);
    if (retainExecuteOrder && statementData != null && !key.equals(lastKey)) {
        statementData = null;/* w w  w.jav  a 2 s  . c o  m*/
        executeUpTo(key, true);
    }
    if (statementData == null) {
        statementData = unusedStatementData.remove(key);
        if (statementData == null) {
            Connection connection = getConnection(ms.getStatementLog());
            Statement stmt = handler.prepare(connection);
            statementData = new StatementData(stmt);
        }
        statementsData.put(key, statementData);
    }
    lastKey = key;
    statementData.addParameterObject(parameterObject);
    handler.parameterize(statementData.getStatement());
    handler.batch(statementData.getStatement());
    return BATCH_UPDATE_RETURN_VALUE;
}

From source file:com.luxoft.mybatis.splitter.UpdateSplitterPlugin.java

License:Apache License

@Override
public Object intercept(Invocation invocation) throws Throwable {
    MappedStatement ms = (MappedStatement) invocation.getArgs()[0];
    Object parameterObject = invocation.getArgs()[1];
    final Configuration configuration = ms.getConfiguration();
    final StatementHandler handler = configuration.newStatementHandler((Executor) invocation.getTarget(), ms,
            parameterObject, RowBounds.DEFAULT, null, null);
    final BoundSql boundSql = handler.getBoundSql();
    final String sql = boundSql.getSql();
    List<String> splitted = splitter.split(sql);
    int rc = 0;/*from  w  w  w . ja v a  2s . co  m*/
    List<ParameterMapping> fullParameterMappings = new ArrayList<ParameterMapping>(
            boundSql.getParameterMappings());
    for (String sqlPart : splitted) {
        if (skipEmptyStatements && sqlPart.length() == 0) {
            continue;
        }
        int numParams = 0;
        for (int index = sqlPart.indexOf('?'); index >= 0; index = sqlPart.indexOf('?', index + 1)) {
            numParams++;
        }
        MappedStatement subStatement = subStatements.get(ms);
        if (subStatement == null) {
            subStatement = new MappedStatement.Builder(ms.getConfiguration(), ms.getId(),
                    new SwitchingSqlSource(configuration), ms.getSqlCommandType()).cache(ms.getCache())
                            .databaseId(ms.getDatabaseId()).fetchSize(ms.getFetchSize())
                            .timeout(ms.getTimeout()).flushCacheRequired(ms.isFlushCacheRequired())
                            .useCache(ms.isUseCache()).build();
            subStatements.put(ms, subStatement);
        }
        List<ParameterMapping> subParameterMappings = fullParameterMappings.subList(0, numParams);
        ((SwitchingSqlSource) subStatement.getSqlSource()).switchParams(sqlPart, boundSql,
                new ArrayList<ParameterMapping>(subParameterMappings));
        subParameterMappings.clear();
        int subRc = (Integer) invocation.getMethod().invoke(invocation.getTarget(), subStatement,
                parameterObject);
        if (rc >= 0) {
            rc = subRc < 0 ? subRc : rc + subRc;
        }
    }
    return rc;
}

From source file:core.plugin.mybatis.PageInterceptor.java

License:Apache License

@Override
public Object intercept(Invocation inv) throws Throwable {
    // prepare?Connection
    Connection connection = (Connection) inv.getArgs()[0];
    String dbType = connection.getMetaData().getDatabaseProductName();
    L.debug(dbType);// ww  w. j ava  2 s.  c o m
    Dialect dialect = null;
    if (StringUtils.equalsIgnoreCase("ORACLE", dbType)) {
        dialect = new OracleDialect();
    } else if (StringUtils.equalsIgnoreCase("H2", dbType)) {
        dialect = new H2Dialect();
    } else {
        throw new AppRuntimeException("A404: Not Support ['" + dbType + "'] Pagination Yet!");
    }

    StatementHandler target = (StatementHandler) inv.getTarget();
    BoundSql boundSql = target.getBoundSql();
    String sql = boundSql.getSql();
    if (StringUtils.isBlank(sql)) {
        return inv.proceed();
    }
    // ?select??
    if (sql.matches(SQL_SELECT_REGEX) && !Pattern.matches(SQL_COUNT_REGEX, sql)) {
        Object obj = FieldUtils.readField(target, "delegate", true);
        // ??? RowBounds 
        RowBounds rowBounds = (RowBounds) FieldUtils.readField(obj, "rowBounds", true);
        // ??SQL
        if (rowBounds != null && rowBounds != RowBounds.DEFAULT) {
            FieldUtils.writeField(boundSql, "sql", dialect.getSqlWithPagination(sql, rowBounds), true);
            // ???(?)
            FieldUtils.writeField(rowBounds, "offset", RowBounds.NO_ROW_OFFSET, true);
            FieldUtils.writeField(rowBounds, "limit", RowBounds.NO_ROW_LIMIT, true);
        }
    }
    return inv.proceed();
}

From source file:org.hswebframework.web.dao.mybatis.plgins.pager.PagerInterceptor.java

License:Apache License

@Override
public Object plugin(Object target) {
    if (target instanceof StatementHandler) {
        StatementHandler statementHandler = (StatementHandler) target;
        MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler);
        String sql = statementHandler.getBoundSql().getSql();
        Pager pager = Pager.getAndReset();
        String newSql = sql;/*from w  ww  . j  av a 2 s .c  om*/
        if (sql.trim().toLowerCase().startsWith("select")) {
            if (pager != null) {
                newSql = EasyOrmSqlBuilder.getInstance().getActiveDatabase().getDialect().doPaging(sql,
                        pager.pageIndex(), pager.pageSize());
            }
            Object queryEntity = statementHandler.getParameterHandler().getParameterObject();
            if (queryEntity instanceof QueryParam && ((QueryParam) queryEntity).isForUpdate()) {
                newSql = newSql + " for update";
            }
            metaStatementHandler.setValue("delegate.boundSql.sql", newSql);
        }

    }
    return Plugin.wrap(target, this);
}

From source file:org.nebula.service.dao.PaginationInterceptor.java

License:Apache License

public Object intercept(Invocation inv) throws Throwable {

    StatementHandler target = (StatementHandler) inv.getTarget();
    BoundSql boundSql = target.getBoundSql();
    String sql = boundSql.getSql();
    if (StringUtils.isBlank(sql)) {
        return inv.proceed();
    }//  w  w  w. j a v a 2  s. c o m
    logger.debug("origin sql>>>>>" + sql.replaceAll("\n", ""));
    // ?select??
    if (sql.matches(SQL_SELECT_REGEX) && !Pattern.matches(SQL_COUNT_REGEX, sql)) {
        Object obj = FieldUtils.readField(target, "delegate", true);
        // ??? RowBounds 
        RowBounds rowBounds = (RowBounds) FieldUtils.readField(obj, "rowBounds", true);
        // ??SQL
        if (rowBounds != null && rowBounds != RowBounds.DEFAULT) {
            FieldUtils.writeField(boundSql, "sql", newSql(sql, rowBounds), true);
            logger.debug("new sql>>>>>" + boundSql.getSql().replaceAll("\n", ""));
            // ???(?)
            FieldUtils.writeField(rowBounds, "offset", RowBounds.NO_ROW_OFFSET, true);
            FieldUtils.writeField(rowBounds, "limit", RowBounds.NO_ROW_LIMIT, true);
        }
    }
    return inv.proceed();
}