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.jeebase.common.base.component.DataPermissionPaginationInterceptor.java

License:Apache License

/**
 * Physical Page Interceptor for all the queries with parameter {@link RowBounds}
 *//* w  w w .  jav a 2 s  .c om*/
@SuppressWarnings("unchecked")
@Override
public Object intercept(Invocation invocation) throws Throwable {
    StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
    MetaObject metaObject = SystemMetaObject.forObject(statementHandler);

    // SQL ?
    this.sqlParser(metaObject);

    // ?SELECT?
    MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
    if (!SqlCommandType.SELECT.equals(mappedStatement.getSqlCommandType())) {
        return invocation.proceed();
    }

    // rowBounds?mapper??
    BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
    Object paramObj = boundSql.getParameterObject();
    String originalSql = boundSql.getSql();

    // ???
    // ??DataPermission
    DataPermissionPage dataPermissionPage = null;
    if (paramObj instanceof DataPermissionPage) {
        dataPermissionPage = (DataPermissionPage) paramObj;
    } else if (paramObj instanceof Map) {
        for (Object arg : ((Map) paramObj).values()) {
            if (arg instanceof DataPermissionPage) {
                dataPermissionPage = (DataPermissionPage) arg;
                break;
            }
        }
    }
    if (null != dataPermissionPage) {
        // ?orgId??
        if (StringUtils.isEmpty(dataPermissionPage.getOrgIdAlias())) {
            dataPermissionPage.setOrgIdAlias("organiaztion_id");
        }
        String orgIdAlias = dataPermissionPage.getOrgIdAlias();
        List<String> orgIdList = dataPermissionPage.getOrgIdList();
        String userIdAlias = dataPermissionPage.getUserIdAlias();
        String userId = dataPermissionPage.getUserId();
        boolean ownQuery = dataPermissionPage.isOwnQuery();
        // ?userId??
        if (ownQuery && StringUtils.isEmpty(dataPermissionPage.getUserIdAlias())) {
            dataPermissionPage.setUserIdAlias("user_id");
        }
        // ???SELECTDELETEUPDATE
        SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
        if (SqlCommandType.SELECT.equals(sqlCommandType)) {
            originalSql = DataPermissionUtil.convertDataPermission(originalSql, orgIdAlias, orgIdList, ownQuery,
                    userIdAlias, userId);
        }
    }
    // ????

    // ??page
    IPage page = null;
    if (paramObj instanceof IPage) {
        page = (IPage) paramObj;
    } else if (paramObj instanceof Map) {
        for (Object arg : ((Map) paramObj).values()) {
            if (arg instanceof IPage) {
                page = (IPage) arg;
                break;
            }
        }
    }

    /*
     * ??? size ? 0 
     */
    if (null == page || page.getSize() < 0) {
        return invocation.proceed();
    }

    Connection connection = (Connection) invocation.getArgs()[0];
    DbType dbType = StringUtils.isNotEmpty(dialectType) ? DbType.getDbType(dialectType)
            : JdbcUtils.getDbType(connection.getMetaData().getURL());

    boolean orderBy = true;
    if (page.isSearchCount()) {
        SqlInfo sqlInfo = SqlParserUtils.getOptimizeCountSql(page.optimizeCountSql(), sqlParser, originalSql);
        orderBy = sqlInfo.isOrderBy();
        this.queryTotal(overflow, sqlInfo.getSql(), mappedStatement, boundSql, page, connection);
        //            if (page.getTotal() <= 0) {
        //                return invocation.proceed();
        //            }
    }

    String buildSql = concatOrderBy(originalSql, page, orderBy);
    DialectModel model = DialectFactory.buildPaginationSql(page, buildSql, dbType, dialectClazz);
    Configuration configuration = mappedStatement.getConfiguration();
    List<ParameterMapping> mappings = new ArrayList<>(boundSql.getParameterMappings());
    Map<String, Object> additionalParameters = (Map<String, Object>) metaObject
            .getValue("delegate.boundSql.additionalParameters");
    model.consumers(mappings, configuration, additionalParameters);
    metaObject.setValue("delegate.boundSql.sql", model.getDialectSql());
    metaObject.setValue("delegate.boundSql.parameterMappings", mappings);
    return invocation.proceed();
}

From source file:com.jhcz.trade.framework.plugin.mybatis.PagePlugin.java

License:Open Source License

public Object intercept(Invocation ivk) throws Throwable {
    if (ivk.getTarget() instanceof RoutingStatementHandler) {
        RoutingStatementHandler statementHandler = (RoutingStatementHandler) ivk.getTarget();
        BaseStatementHandler delegate = (BaseStatementHandler) ReflectHelper
                .getValueByFieldName(statementHandler, "delegate");
        MappedStatement mappedStatement = (MappedStatement) ReflectHelper.getValueByFieldName(delegate,
                "mappedStatement");

        // 1???.*query.* 2??page?

        // if (mappedStatement.getId().matches(pageSqlId)) { // ?SQL
        BoundSql boundSql = delegate.getBoundSql();

        // SQL<select>parameterType??Mapper??,??
        Object parameterObject = boundSql.getParameterObject();

        if (parameterObject == null) {
            // throw new
            // NullPointerException("boundSql.getParameterObject() is null!");
            return ivk.proceed();
        } else {//  ww  w. j av  a  2  s  . co  m

            PageView pageView = null;

            if (parameterObject instanceof PageView) {
                // ?Pages
                pageView = (PageView) parameterObject;
            } else if (parameterObject instanceof Map) {
                for (Entry entry : (Set<Entry>) ((Map) parameterObject).entrySet()) {
                    if (entry.getValue() instanceof PageView) {
                        pageView = (PageView) entry.getValue();
                        break;
                    }
                }
                if (pageView == null) {
                    return ivk.proceed();
                }
            } else {
                // ??Pages
                pageView = ReflectHelper.getValueByFieldType(parameterObject, PageView.class);
                if (pageView == null) {
                    return ivk.proceed();
                }
            }

            String sql = boundSql.getSql();
            PreparedStatement countStmt = null;
            ResultSet rs = null;
            try {

                // 
                Connection connection = (Connection) ivk.getArgs()[0];

                String countSql = "select count(1) from (" + sql + ") tmp_count";
                countStmt = connection.prepareStatement(countSql);

                ReflectHelper.setValueByFieldName(boundSql, "sql", countSql);

                DefaultParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement,
                        parameterObject, boundSql);

                parameterHandler.setParameters(countStmt);
                rs = countStmt.executeQuery();

                int count = 0;

                if (rs.next()) {
                    count = ((Number) rs.getObject(1)).intValue();
                }

                pageView.setRowCount(count);
            } finally {
                try {
                    rs.close();
                } catch (Exception e) {
                }
                try {
                    countStmt.close();
                } catch (Exception e) {
                }
            }

            String pageSql = generatePagesSql(sql, pageView);
            ReflectHelper.setValueByFieldName(boundSql, "sql", pageSql); // sql???BoundSql.
        }
        // }
    }
    return ivk.proceed();
}

From source file:com.joey.Fujikom.common.persistence.interceptor.PaginationInterceptor.java

License:Open Source 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  . j a v a 2 s .  co  m*/
    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());
        MappedStatement newMs = copyFromMappedStatement(mappedStatement, new BoundSqlSqlSource(newBoundSql));

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

From source file:com.joey.Fujikom.common.persistence.interceptor.PreparePaginationInterceptor.java

License:Open Source 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   ww  w.j av a  2s  . co  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.jwmoon.framework.sql.MyBatisQueryResolver.java

License:Open Source License

private String resolveQuery(SqlSession sqlSession, String queryId, Object sqlParam) {

    BoundSql boundSql = sqlSession.getConfiguration().getMappedStatement(queryId).getSqlSource()
            .getBoundSql(sqlParam);/*w w  w .  j av  a 2s.  co  m*/

    String sql = boundSql.getSql();
    //System.out.println(" ? SQL : " + sql);

    Object paramObj = boundSql.getParameterObject();

    if (paramObj != null) {
        List<ParameterMapping> paramMapping = boundSql.getParameterMappings();

        Class<? extends Object> paramClass = paramObj.getClass();

        for (ParameterMapping mapping : paramMapping) {
            String propValue = mapping.getProperty();
            try {
                Field field = paramClass.getDeclaredField(propValue);
                field.setAccessible(true); //  private?   

                Class<?> javaType = mapping.getJavaType();

                if (String.class == javaType) {
                    sql = sql.replaceFirst("\\?", "'" + field.get(paramObj) + "'");
                } else {
                    sql = sql.replaceFirst("\\?", "'" + field.get(paramObj).toString() + "'");
                }

            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
    return sql;
}

From source file:com.linju.framework.pager.MSUtils.java

License:Open Source License

/**
 * ???SqlSource//from   w  w w  .  j  av a2  s.co  m
 * <br/>
 * ParameterMappings??
 *
 * @param configuration
 * @param sqlSource
 * @param parameterObject
 * @return
 */
public SqlSource getStaticPageSqlSource(Configuration configuration, SqlSource sqlSource,
        Object parameterObject) {
    BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
    return new StaticSqlSource(configuration, parser.getPageSql(boundSql.getSql()),
            parser.getPageParameterMapping(configuration, boundSql));
}

From source file:com.linju.framework.pager.MSUtils.java

License:Open Source License

/**
 * ???countSqlSource//from  w  ww. j av a  2s. c o  m
 *
 * @param configuration
 * @param sqlSource
 * @param parameterObject
 * @return
 */
public SqlSource getStaticCountSqlSource(Configuration configuration, SqlSource sqlSource,
        Object parameterObject) {
    BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
    return new StaticSqlSource(configuration, parser.getCountSql(boundSql.getSql()),
            boundSql.getParameterMappings());
}

From source file:com.linju.framework.pager.sqlsource.PageProviderSqlSource.java

License:Open Source License

@Override
public BoundSql getBoundSql(Object parameterObject) {
    BoundSql boundSql = null;
    if (parameterObject instanceof Map && ((Map) parameterObject).containsKey(PROVIDER_OBJECT)) {
        boundSql = providerSqlSource.getBoundSql(((Map) parameterObject).get(PROVIDER_OBJECT));
    } else {/*from w ww . j a v a2s . c  o m*/
        boundSql = providerSqlSource.getBoundSql(parameterObject);
    }
    if (count) {
        return new BoundSql(configuration, parser.getCountSql(boundSql.getSql()),
                boundSql.getParameterMappings(), parameterObject);
    } else {
        return new BoundSql(configuration, parser.getPageSql(boundSql.getSql()),
                parser.getPageParameterMapping(configuration, boundSql), parameterObject);
    }
}

From source file:com.lushapp.common.orm.mybatis.interceptor.PaginationInterceptor.java

License:Open Source License

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 .java 2 s .  c om*/
    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.setTotalCount(
                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());
        MappedStatement newMs = copyFromMappedStatement(mappedStatement, new BoundSqlSqlSource(newBoundSql));

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

From source file:com.lushapp.common.orm.mybatis.interceptor.PreparePaginationInterceptor.java

License:Open Source License

public Object intercept(Invocation ivk) throws Throwable {
    if (ivk.getTarget().getClass().isAssignableFrom(RoutingStatementHandler.class)) {
        final RoutingStatementHandler statementHandler = (RoutingStatementHandler) ivk.getTarget();
        final BaseStatementHandler delegate = ReflectionUtils.getFieldValue(statementHandler, DELEGATE);
        final MappedStatement mappedStatement = ReflectionUtils.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 {//w  w  w.  j a  v  a2  s  . c  o  m
            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.setTotalCount(count);
            String pagingSql = SQLHelper.generatePageSql(sql, page, DIALECT);
            if (log.isDebugEnabled()) {
                log.debug("PAGE SQL:" + pagingSql);
            }
            //sql???BoundSql.
            ReflectionUtils.setFieldValue(boundSql, "sql", pagingSql);
        }

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

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