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.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.hj.blog.common.orm.PageInterceptor.java

License:Apache License

private void setTotalCount(DigitalPage page, Object parameterObject, MappedStatement mappedStatement,
        Connection connection) {//from w w  w.j  a  va 2s  .c om
    BoundSql boundSql = mappedStatement.getBoundSql(parameterObject);
    String sql = boundSql.getSql();
    String countSql = getTotalCountSql(sql);
    List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
    BoundSql countBoundSql = new BoundSql(mappedStatement.getConfiguration(), countSql, parameterMappings,
            parameterObject);
    ParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement, parameterObject,
            countBoundSql);
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    try {
        preparedStatement = connection.prepareStatement(countSql);
        parameterHandler.setParameters(preparedStatement);
        resultSet = preparedStatement.executeQuery();
        if (resultSet.next()) {
            int totalCount = resultSet.getInt(1);
            page.setTotalCount(totalCount);
        }
    } catch (SQLException e) {
        throw new RuntimeException(e);
    } finally {
        try {
            if (resultSet != null)
                resultSet.close();
            if (preparedStatement != null)
                preparedStatement.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

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

License:Apache License

/**
 * ??/*  ww  w  . j a  va2s  . 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.huang.rp.common.persistence.PageInterceptor.java

License:Apache License

/**
 * ??page// ww  w  .j  av  a2 s  . com
 */
private void setTotalRecord(QueryFilter filter, MappedStatement mappedStatement, Connection connection) {
    BoundSql boundSql = mappedStatement.getBoundSql(filter);
    String sql = boundSql.getSql();
    String countSql = this.getCountSql(sql);
    List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
    BoundSql countBoundSql = new BoundSql(mappedStatement.getConfiguration(), countSql, parameterMappings,
            boundSql.getParameterObject());
    MetaObject metaParameters = (MetaObject) ReflectionUtils.getFieldValue(boundSql, "metaParameters");
    ReflectionUtils.setFieldValue(countBoundSql, "metaParameters", metaParameters);
    ParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement, filter, countBoundSql);
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        pstmt = connection.prepareStatement(countSql);
        parameterHandler.setParameters(pstmt);
        rs = pstmt.executeQuery();
        if (rs.next()) {
            int totalRecord = rs.getInt(1);
            filter.setRecords(totalRecord);
            int rows = filter.getRows();
            // 
            int total = totalRecord / rows;
            total = totalRecord % rows == 0 ? total : total + 1;
            filter.setTotal(total);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (rs != null)
                rs.close();
            if (pstmt != null)
                pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

From source file:com.icfcc.db.pagehelper.sqlsource.PageDynamicSqlSource.java

License:Open Source License

@Override
protected BoundSql getCountBoundSql(Object parameterObject) {
    DynamicContext context = new DynamicContext(configuration, parameterObject);
    rootSqlNode.apply(context);/*w  w w .  j a v a2  s .c om*/
    SqlSourceBuilder sqlSourceParser = new SqlSourceBuilder(configuration);
    Class<?> parameterType = parameterObject == null ? Object.class : parameterObject.getClass();
    SqlSource sqlSource = sqlSourceParser.parse(context.getSql(), parameterType, context.getBindings());
    BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
    sqlSource = new StaticSqlSource(configuration, parser.getCountSql(boundSql.getSql()),
            boundSql.getParameterMappings());
    boundSql = sqlSource.getBoundSql(parameterObject);
    //??
    for (Map.Entry<String, Object> entry : context.getBindings().entrySet()) {
        boundSql.setAdditionalParameter(entry.getKey(), entry.getValue());
    }
    return boundSql;
}

From source file:com.icfcc.db.pagehelper.sqlsource.PageDynamicSqlSource.java

License:Open Source License

@Override
protected BoundSql getPageBoundSql(Object parameterObject) {
    DynamicContext context;//from   w ww . ja  v a2s.  c  om
    //??parameterObject???
    //??Map?KEY
    //bug#25:http://git.oschina.net/free/Mybatis_PageHelper/issues/25
    if (parameterObject != null && parameterObject instanceof Map
            && ((Map) parameterObject).containsKey(ORIGINAL_PARAMETER_OBJECT)) {
        context = new DynamicContext(configuration, ((Map) parameterObject).get(ORIGINAL_PARAMETER_OBJECT));
    } else {
        context = new DynamicContext(configuration, parameterObject);
    }
    rootSqlNode.apply(context);
    SqlSourceBuilder sqlSourceParser = new SqlSourceBuilder(configuration);
    Class<?> parameterType = parameterObject == null ? Object.class : parameterObject.getClass();
    SqlSource sqlSource = sqlSourceParser.parse(context.getSql(), parameterType, context.getBindings());
    sqlSource = new OrderByStaticSqlSource((StaticSqlSource) sqlSource);
    BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
    sqlSource = new StaticSqlSource(configuration, parser.getPageSql(boundSql.getSql()),
            parser.getPageParameterMapping(configuration, boundSql));
    boundSql = sqlSource.getBoundSql(parameterObject);
    //??
    for (Map.Entry<String, Object> entry : context.getBindings().entrySet()) {
        boundSql.setAdditionalParameter(entry.getKey(), entry.getValue());
    }
    return boundSql;
}

From source file:com.icfcc.db.pagehelper.sqlsource.PageProviderSqlSource.java

License:Open Source License

@Override
protected BoundSql getCountBoundSql(Object parameterObject) {
    BoundSql boundSql;
    SqlSource sqlSource = createSqlSource(parameterObject);
    boundSql = sqlSource.getBoundSql(parameterObject);
    return new BoundSql(configuration, parser.getCountSql(boundSql.getSql()), boundSql.getParameterMappings(),
            parameterObject);//  w  w w  .  j a  v  a  2 s. c  o m
}

From source file:com.icfcc.db.pagehelper.sqlsource.PageProviderSqlSource.java

License:Open Source License

@Override
protected BoundSql getPageBoundSql(Object parameterObject) {
    BoundSql boundSql;
    if (parameterObject instanceof Map && ((Map) parameterObject).containsKey(PROVIDER_OBJECT)) {
        SqlSource sqlSource = createSqlSource(((Map) parameterObject).get(PROVIDER_OBJECT));
        boundSql = sqlSource.getBoundSql(((Map) parameterObject).get(PROVIDER_OBJECT));
    } else {//from   w  ww .j a v a 2s  .com
        SqlSource sqlSource = createSqlSource(parameterObject);
        boundSql = sqlSource.getBoundSql(parameterObject);
    }
    return new BoundSql(configuration, parser.getPageSql(boundSql.getSql()),
            parser.getPageParameterMapping(configuration, boundSql), parameterObject);
}

From source file:com.itfsw.mybatis.generator.plugins.tools.SqlHelper.java

License:Apache License

/**
 * ????sql/*from   www . j a  v a2  s  .  c  o m*/
 * @param session
 * @param namespace
 * @param params
 * @return
 */
public static String getNamespaceSql(SqlSession session, String namespace, Object params) {
    Configuration configuration = session.getConfiguration();
    MappedStatement mappedStatement = configuration.getMappedStatement(namespace);
    TypeHandlerRegistry typeHandlerRegistry = mappedStatement.getConfiguration().getTypeHandlerRegistry();
    BoundSql boundSql = mappedStatement.getBoundSql(params);
    List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
    String sql = boundSql.getSql();
    if (parameterMappings != null) {
        for (int i = 0; i < parameterMappings.size(); i++) {
            ParameterMapping parameterMapping = parameterMappings.get(i);
            if (parameterMapping.getMode() != ParameterMode.OUT) {
                Object value;
                String propertyName = parameterMapping.getProperty();
                if (boundSql.hasAdditionalParameter(propertyName)) {
                    value = boundSql.getAdditionalParameter(propertyName);
                } else if (params == null) {
                    value = null;
                } else if (typeHandlerRegistry.hasTypeHandler(params.getClass())) {
                    value = params;
                } else {
                    MetaObject metaObject = configuration.newMetaObject(params);
                    value = metaObject.getValue(propertyName);
                }
                JdbcType jdbcType = parameterMapping.getJdbcType();
                if (value == null && jdbcType == null)
                    jdbcType = configuration.getJdbcTypeForNull();
                sql = replaceParameter(sql, value, jdbcType, parameterMapping.getJavaType());
            }
        }
    }
    return sql;
}

From source file:com.jeebase.common.base.component.DataPermissionInterceptor.java

License:Apache License

/**
 * Physical Page Interceptor for all the queries with parameter {@link RowBounds}
 *///  www.  j  ava 2s.co  m
@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);

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

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

    /*
     * ?????
     */
    if (null == dataPermissionCondition) {
        return invocation.proceed();
    }

    // ?orgId??
    if (StringUtils.isEmpty(dataPermissionCondition.getOrgIdAlias())) {
        dataPermissionCondition.setOrgIdAlias("organiaztion_id");
    }

    String orgIdAlias = dataPermissionCondition.getOrgIdAlias();

    List<String> orgIdList = dataPermissionCondition.getOrgIdList();

    String userIdAlias = dataPermissionCondition.getUserIdAlias();

    String userId = dataPermissionCondition.getUserId();

    boolean ownQuery = dataPermissionCondition.isOwnQuery();

    // ?userId??
    if (ownQuery && StringUtils.isEmpty(dataPermissionCondition.getUserIdAlias())) {
        dataPermissionCondition.setUserIdAlias("user_id");
    }

    // ???SELECTDELETEUPDATE
    MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
    SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
    String originalSql = boundSql.getSql();
    if (SqlCommandType.SELECT.equals(sqlCommandType) || SqlCommandType.DELETE.equals(sqlCommandType)
            || SqlCommandType.UPDATE.equals(sqlCommandType)) {
        String newSql = DataPermissionUtil.convertDataPermission(originalSql, orgIdAlias, orgIdList, ownQuery,
                userIdAlias, userId);
        metaObject.setValue("delegate.boundSql.sql", newSql);
    } else {
        return invocation.proceed();
    }

    return invocation.proceed();
}