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.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   w w  w .j  a va 2s  .  c  o 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);/*from   w w  w.  j av  a  2s.c o  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.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   www .j a 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.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 {/*from  ww  w  .  j  av a 2 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();
}

From source file:com.mook.locker.interceptor.OptimisticLocker.java

License:Apache License

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

    String interceptMethod = invocation.getMethod().getName();
    String versionColumn = props.getProperty("versionColumn", "version");

    if ("prepare".equals(interceptMethod)) {

        StatementHandler handler = (StatementHandler) invocation.getTarget();
        MetaObject hm = SystemMetaObject.forObject(handler);

        MappedStatement ms = (MappedStatement) hm.getValue("delegate.mappedStatement");
        SqlCommandType sqlCmdType = ms.getSqlCommandType();
        if (sqlCmdType != SqlCommandType.UPDATE) {
            return invocation.proceed();
        }//from w ww.  jav  a  2s .c om

        BoundSql boundSql = (BoundSql) hm.getValue("delegate.boundSql");
        if (hasVersionLocker(ms, boundSql)) {
            return invocation.proceed();
        }

        Object originalVersion = hm.getValue("delegate.boundSql.parameterObject.version");
        Object versionIncr = castTypeAndOptValue(originalVersion,
                hm.getValue("delegate.boundSql.parameterObject"), ValueType.INCREASE);
        hm.setValue("delegate.boundSql.parameterObject.version", versionIncr);

        String originalSql = (String) hm.getValue("delegate.boundSql.sql");
        StringBuilder builder = new StringBuilder(originalSql);
        builder.append(" and ");
        builder.append(versionColumn);
        builder.append(" = ?");
        hm.setValue("delegate.boundSql.sql", builder.toString());

        if (log.isDebugEnabled()) {
            log.debug("==> originalSql: " + originalSql);
        }

        return invocation.proceed();

    } else if ("setParameters".equals(interceptMethod)) {

        ParameterHandler handler = (ParameterHandler) invocation.getTarget();
        MetaObject hm = SystemMetaObject.forObject(handler);

        MappedStatement ms = (MappedStatement) hm.getValue("mappedStatement");
        SqlCommandType sqlCmdType = ms.getSqlCommandType();
        if (sqlCmdType != SqlCommandType.UPDATE) {
            return invocation.proceed();
        }

        Configuration configuration = (Configuration) hm.getValue("configuration");
        BoundSql boundSql = (BoundSql) hm.getValue("boundSql");

        if (hasVersionLocker(ms, boundSql)) {
            return invocation.proceed();
        }

        Object result = invocation.proceed();

        ParameterMapping versionMapping = new ParameterMapping.Builder(configuration, versionColumn,
                Object.class).build();

        Object parameterObject = boundSql.getParameterObject();

        MetaObject pm = configuration.newMetaObject(parameterObject);
        if (parameterObject instanceof MapperMethod.ParamMap<?>) {
            MapperMethod.ParamMap<?> paramMap = (MapperMethod.ParamMap<?>) parameterObject;
            if (!paramMap.containsKey(versionColumn)) {
                throw new TypeException("??MyBatis@Param");
            }
        }
        Object value = pm.getValue(versionColumn);
        TypeHandler typeHandler = versionMapping.getTypeHandler();
        JdbcType jdbcType = versionMapping.getJdbcType();

        if (value == null && jdbcType == null) {
            jdbcType = configuration.getJdbcTypeForNull();
        }
        List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
        try {
            PreparedStatement ps = (PreparedStatement) invocation.getArgs()[0];
            Object val = castTypeAndOptValue(value, parameterObject, ValueType.DECREASE);
            typeHandler.setParameter(ps, parameterMappings.size() + 1, val, jdbcType);
        } catch (TypeException e) {
            throw new TypeException(
                    "Could not set parameters for mapping: " + parameterMappings + ". Cause: " + e, e);
        } catch (SQLException e) {
            throw new TypeException(
                    "Could not set parameters for mapping: " + parameterMappings + ". Cause: " + e, e);
        }
        return result;
    }
    return invocation.proceed();
}

From source file:com.mook.locker.interceptor.OptimisticLocker.java

License:Apache License

private boolean hasVersionLocker(MappedStatement ms, BoundSql boundSql) {
    Map<String, Class<?>> mapperMap = new HashMap<String, Class<?>>();
    Collection<Class<?>> mappers = ms.getConfiguration().getMapperRegistry().getMappers();
    if (null != mappers && !mappers.isEmpty()) {
        for (Class<?> me : mappers) {
            mapperMap.put(me.getName(), me);
        }/*from  w  ww .j a  va  2  s .  c  o m*/
    }

    Class<?>[] paramCls = null;

    Object paramObj = boundSql.getParameterObject();
    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();
            }
        }
    }

    String id = ms.getId();
    int pos = id.lastIndexOf(".");
    String nameSpace = id.substring(0, pos);
    if (mapperMap.containsKey(nameSpace)) {
        Class<?> mapper = mapperMap.get(nameSpace);
        Method m = null;
        try {
            if (null == paramCls && paramObj instanceof Map) {
                paramCls = new Class<?>[] { Map.class };
            } else {
                paramCls = new Class<?>[] { paramObj.getClass() };
            }
            m = mapper.getDeclaredMethod(id.substring(pos + 1), paramCls);

        } catch (NoSuchMethodException | SecurityException e) {
            throw new RuntimeException("Map?");
        }
        VersionLocker vl = m.getAnnotation(VersionLocker.class);
        if (null != vl && vl.value() == false) {
            return true;
        } else {
            return false;
        }
    } else {
        throw new RuntimeException("?");
    }

}

From source file:com.mybatisX.plugins.PaginationInterceptor.java

License:Apache License

/**
 * ?/* ww  w  .  jav  a 2s .  c o m*/
 *
 * @param sql
 * @param connection
 * @param mappedStatement
 * @param boundSql
 * @param page
 */
public Pagination count(String sql, Connection connection, MappedStatement mappedStatement, BoundSql boundSql,
        Pagination page) {
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        pstmt = connection.prepareStatement(sql);
        BoundSql countBS = new BoundSql(mappedStatement.getConfiguration(), sql,
                boundSql.getParameterMappings(), boundSql.getParameterObject());
        ParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement,
                boundSql.getParameterObject(), countBS);
        parameterHandler.setParameters(pstmt);
        rs = pstmt.executeQuery();
        int total = 0;
        if (rs.next()) {
            total = rs.getInt(1);
        }
        page.setTotal(total);
        /*
         * 
         */
        if (overflowCurrent && (page.getCurrent() > page.getPages())) {
            page = new Pagination(1, page.getSize());
            page.setTotal(total);
        }
    } catch (Exception e) {
        // ignored
    } finally {
        IOUtils.closeQuietly(pstmt, rs);
    }
    return page;
}

From source file:com.saituo.talk.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//from www.  j  a  va 2  s  .co m
    // // 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();

    // ??
    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.springD.framework.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();

    //??//ww  w .  j av  a2s . c  om
    Page<Object> page = null;
    if (parameterObject != null) {
        page = convertParameter(parameterObject, page);
    }

    //
    if (page != null && page.getPageSize() != -1) {

        if (org.apache.commons.lang3.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.tj.mybatisplus.plugins.PaginationInterceptor.java

License:Apache License

/**
 * ?// w  ww .j  ava  2s. c o m
 * 
 * @param sql
 * @param connection
 * @param mappedStatement
 * @param boundSql
 * @param page
 */
public Pagination count(String sql, Connection connection, MappedStatement mappedStatement, BoundSql boundSql,
        Pagination page) {
    String sqlUse = sql;
    int order_by = sql.toUpperCase().lastIndexOf("ORDER BY");
    if (order_by > -1) {
        sqlUse = sql.substring(0, order_by);
    }
    StringBuffer countSql = new StringBuffer("SELECT COUNT(1) AS TOTAL FROM (");
    countSql.append(sqlUse).append(") A");
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        pstmt = connection.prepareStatement(countSql.toString());
        BoundSql countBS = new BoundSql(mappedStatement.getConfiguration(), countSql.toString(),
                boundSql.getParameterMappings(), boundSql.getParameterObject());
        ParameterHandler parameterHandler = new DefaultParameterHandler(mappedStatement,
                boundSql.getParameterObject(), countBS);
        parameterHandler.setParameters(pstmt);
        rs = pstmt.executeQuery();
        int total = 0;
        if (rs.next()) {
            total = rs.getInt(1);
        }
        page.setTotal(total);
        /**
         * ??
         */
        if (page.getCurrent() > page.getPages()) {
            page = new Pagination(1, page.getSize());
            page.setTotal(total);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            rs.close();
            pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    return page;
}