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

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

Introduction

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

Prototype

public Object getParameterObject() 

Source Link

Usage

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  a2s  . com*/
        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

private BoundSql copyFromBoundSql(MappedStatement ms, BoundSql boundSql, String sql) {
    BoundSql newBoundSql = new BoundSql(ms.getConfiguration(), sql, boundSql.getParameterMappings(),
            boundSql.getParameterObject());
    for (ParameterMapping mapping : boundSql.getParameterMappings()) {
        String prop = mapping.getProperty();
        if (boundSql.hasAdditionalParameter(prop)) {
            newBoundSql.setAdditionalParameter(prop, boundSql.getAdditionalParameter(prop));
        }//  w ww. j  a  va2 s  . co m
    }
    return newBoundSql;
}

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  ww  .  jav a  2 s.c o m*/
        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

/**
 * ??//w ww . ja v  a2 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.huang.rp.common.persistence.PageInterceptor.java

License:Apache License

/**
 * ??page//  www .j ava2s .co m
 */
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.jeebase.common.base.component.DataPermissionInterceptor.java

License:Apache License

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

    // 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();
}

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

License:Apache License

/**
 * Physical Page Interceptor for all the queries with parameter {@link RowBounds}
 *///from  w ww.  j av a  2  s .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);

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

License:Apache License

/**
 * ?//w  w w.  j a  v  a2s  . c o  m
 *
 * @param sql             count sql
 * @param mappedStatement MappedStatement
 * @param boundSql        BoundSql
 * @param page            IPage
 * @param connection      Connection
 */
protected void queryTotal(boolean overflowCurrent, String sql, MappedStatement mappedStatement,
        BoundSql boundSql, IPage page, Connection connection) {
    try (PreparedStatement statement = connection.prepareStatement(sql)) {
        DefaultParameterHandler parameterHandler = new MybatisDefaultParameterHandler(mappedStatement,
                boundSql.getParameterObject(), boundSql);
        parameterHandler.setParameters(statement);
        long total = 0;
        try (ResultSet resultSet = statement.executeQuery()) {
            if (resultSet.next()) {
                total = resultSet.getLong(1);
            }
        }
        page.setTotal(total);
        /*
         * 
         */
        long pages = page.getPages();
        if (overflowCurrent && page.getCurrent() > pages) {
            // ?
            page.setCurrent(1);
        }
    } catch (Exception e) {
        throw ExceptionUtils.mpe("Error: Method queryTotal execution error of sql : \n %s \n", e, sql);
    }
}

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 {// www.j  a v a2s .  c  om

            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 ww w .ja  v a 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.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();
}