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: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//w w w .  j  a v a2 s.c  om
    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.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor.java

License:Apache License

private void processChangeSql(MappedStatement ms, BoundSql boundSql, LockerCache lockerCache) throws Exception {
    Object parameterObject = boundSql.getParameterObject();
    if (parameterObject instanceof ParamMap) {
        ParamMap<?> paramMap = (ParamMap<?>) parameterObject;
        parameterObject = paramMap.get("et");
        EntityWrapper<?> entityWrapper = (EntityWrapper<?>) paramMap.get("ew");
        if (entityWrapper != null) {
            Object entity = entityWrapper.getEntity();
            if (entity != null && lockerCache.field.get(entity) == null) {
                changSql(ms, boundSql, parameterObject, lockerCache);
            }// w  ww.  j  a  v a  2 s .co  m
        }
    } else {
        changSql(ms, boundSql, parameterObject, lockerCache);
    }
}

From source file:com.baomidou.mybatisplus.plugins.PaginationInterceptor.java

License:Apache License

/**
 * ?/*from   ww w  .ja  va 2  s . c o m*/
 *
 * @param sql
 * @param mappedStatement
 * @param boundSql
 * @param page
 */
protected void queryTotal(String sql, MappedStatement mappedStatement, BoundSql boundSql, Pagination page,
        Connection connection) {
    try (PreparedStatement statement = connection.prepareStatement(sql)) {
        DefaultParameterHandler parameterHandler = new MybatisDefaultParameterHandler(mappedStatement,
                boundSql.getParameterObject(), boundSql);
        parameterHandler.setParameters(statement);
        int total = 0;
        try (ResultSet resultSet = statement.executeQuery()) {
            if (resultSet.next()) {
                total = resultSet.getInt(1);
            }
        }
        page.setTotal(total);
        /*
         * 
        */
        int pages = page.getPages();
        if (overflowCurrent && (page.getCurrent() > pages)) {
            page = new Pagination(1, page.getSize());
            page.setTotal(total);
        }
    } catch (Exception e) {
        logger.error("Error: Method queryTotal execution error !", e);
    }
}

From source file:com.beginner.core.page.PagePlugin.java

License:Apache License

/**
 * ?/*from ww w  .  java2  s. c om*/
 */
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");

        //?SQL
        if (mappedStatement.getId().matches(mappedStatementId)) {

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

            if (parameterObject == null) {
                throw new NullPointerException("parameterObject?");
            } else {
                Connection connection = (Connection) ivk.getArgs()[0];
                String sql = boundSql.getSql();

                //
                String countSql = "SELECT COUNT(0) FROM (" + sql + ") tmp_count";
                PreparedStatement countStmt = connection.prepareStatement(countSql);
                BoundSql countBS = new BoundSql(mappedStatement.getConfiguration(), countSql,
                        boundSql.getParameterMappings(), parameterObject);
                setParameters(countStmt, mappedStatement, countBS, parameterObject);
                ResultSet rs = countStmt.executeQuery();
                int count = 0;
                if (rs.next()) {
                    count = rs.getInt(1);
                }
                rs.close();
                countStmt.close();

                Page page = null;
                if (parameterObject instanceof Page) { //?Page
                    page = (Page) parameterObject;
                    page.setEntityOrField(true);
                    page.setTotalResult(count);
                } else { //??Page
                    Field pageField = ReflectHelper.getFieldByFieldName(parameterObject, "page");
                    if (pageField != null) {
                        page = (Page) ReflectHelper.getValueByFieldName(parameterObject, "page");
                        if (page == null)
                            page = new Page();
                        page.setEntityOrField(false);
                        page.setTotalResult(count);
                        //??
                        ReflectHelper.setValueByFieldName(parameterObject, "page", page);
                    } else {
                        throw new NoSuchFieldException(
                                parameterObject.getClass().getName() + "? page ?");
                    }
                }
                String pageSql = generatePageSql(sql, page);
                //sql???BoundSql.
                ReflectHelper.setValueByFieldName(boundSql, "sql", pageSql);
            }
        }
    }
    return ivk.proceed();
}

From source file:com.bsb.cms.commons.page.interceptor.PaginationInterceptor.java

License:Open Source License

@Override
public Object intercept(Invocation invocation) throws Throwable {
    // ? MappedStatementBoundSql?sql?
    MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];

    if (mappedStatement.getId().matches(pageSqlId)) { // ?SQL

        Object parameter = invocation.getArgs()[1];
        BoundSql boundSql = mappedStatement.getBoundSql(parameter);
        String originalSql = boundSql.getSql().trim();
        Object parameterObject = boundSql.getParameterObject();

        /*/*from ww  w.j a  v  a  2  s.co  m*/
         * if (parameterObject != null) { page =
         * (Page)ReflectHelper.isPage(parameterObject, "page"); }
         * 
         * if ((page == null) && (context.isPagination())) { page = context;
         * }
         */
        // Pagination page = null;
        PageContext page = PageContext.getContext();
        // Page??
        String countSql = getCountSql(originalSql);
        Connection connection = mappedStatement.getConfiguration().getEnvironment().getDataSource()
                .getConnection();
        PreparedStatement countStmt = connection.prepareStatement(countSql);
        BoundSql countBS = copyFromBoundSql(mappedStatement, boundSql, countSql);
        log.debug("countSql=" + countSql);
        DefaultParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement, parameterObject,
                countBS);
        parameterHandler.setParameters(countStmt);
        ResultSet rs = countStmt.executeQuery();
        int totpage = 0;
        if (rs.next()) {
            totpage = rs.getInt(1);
        }
        rs.close();
        countStmt.close();
        connection.close();// TODO

        // 
        page.init(totpage, page.getPageSize(), page.getCurrentPage());

        if ((StringUtils.isNotEmpty(page.getOrderBy())) && (originalSql.indexOf("BUSINESS_CIRCLE") == -1)) {
            originalSql = originalSql + " ORDER BY " + page.getOrderBy();
        }

        String pageSql = buildPageSqlForMysql(originalSql, page).toString();
        BoundSql newBoundSql = copyFromBoundSql(mappedStatement, boundSql, pageSql);
        MappedStatement newMs = copyFromMappedStatement(mappedStatement, new BoundSqlSqlSource(newBoundSql));
        log.debug("newMs=" + pageSql);
        invocation.getArgs()[0] = newMs;
    }

    return invocation.proceed();
}

From source file:com.bsb.cms.commons.page.interceptor.PaginationInterceptor.java

License:Open Source License

/**
 * ?BoundSql//from  w  w w .j a  va2 s. c  om
 */
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));
        }
    }
    return newBoundSql;
}

From source file:com.chrhc.mybatis.locker.interceptor.OptimisticLocker.java

License:Apache License

private VersionLocker getVersionLocker(MappedStatement ms, BoundSql boundSql) {

    Class<?>[] paramCls = null;
    Object paramObj = boundSql.getParameterObject();

    /******************?????3?***********************/
    /******************Process param must order by below ***********************/
    // 1??@Param?
    // 1?Process @Param param
    if (paramObj instanceof MapperMethod.ParamMap<?>) {
        MapperMethod.ParamMap<?> mmp = (MapperMethod.ParamMap<?>) paramObj;
        if (null != mmp && !mmp.isEmpty()) {
            paramCls = new Class<?>[mmp.size() / 2];
            int mmpLen = mmp.size() / 2;
            for (int i = 0; i < mmpLen; i++) {
                Object index = mmp.get("param" + (i + 1));
                paramCls[i] = index.getClass();
                if (List.class.isAssignableFrom(paramCls[i])) {
                    return falseLocker;
                }/*w  ww  .  ja v  a2  s  . co m*/
            }
        }

        // 2??Map?
        // 2?Process Map param
    } else if (paramObj instanceof Map) {//???
        @SuppressWarnings("rawtypes")
        Map map = (Map) paramObj;
        if (map.get("list") != null || map.get("array") != null) {
            return falseLocker;
        } else {
            paramCls = new Class<?>[] { Map.class };
        }
        // 3??POJO?
        // 3?Process POJO entity param
    } else {
        paramCls = new Class<?>[] { paramObj.getClass() };
    }

    Cache.MethodSignature vm = new MethodSignature(ms.getId(), paramCls);
    VersionLocker versionLocker = versionLockerCache.getVersionLocker(vm);
    if (null != versionLocker) {
        return versionLocker;
    }

    Class<?> mapper = getMapper(ms);
    if (mapper != null) {
        Method m;
        try {
            m = mapper.getDeclaredMethod(getMapperShortId(ms), paramCls);
        } catch (NoSuchMethodException | SecurityException e) {
            throw new RuntimeException("The Map type param error." + e, e);
        }
        versionLocker = m.getAnnotation(VersionLocker.class);
        if (null == versionLocker) {
            versionLocker = trueLocker;
        }
        if (!versionLockerCache.containMethodSignature(vm)) {
            versionLockerCache.cacheMethod(vm, versionLocker);
        }
        return versionLocker;
    } else {
        throw new RuntimeException("Config info error, maybe you have not config the Mapper interface");
    }
}

From source file:com.eryansky.common.orm.mybatis.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  .j a va2s  .c o  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();
        if (log.isDebugEnabled()) {
            log.debug("SQL:" + originalSql);
        }

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

        Dialect dialect = DIALECT;
        //?
        String dbName = convertDbNameParameter(parameterObject);
        if (StringUtils.isNotBlank(dbName)) {
            dialect = getDialect(dbName);
        }

        //  ??
        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.eryansky.common.orm.mybatis.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 = 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 {/*from  w  w w  .j  a v a 2s  .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();
}

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.j a  v a2 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());
        //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();
}