Search in sources :

Example 36 with ParameterMapping

use of org.apache.ibatis.mapping.ParameterMapping in project mybatis-3 by mybatis.

the class XMLMapperBuilder method parameterMapElement.

private void parameterMapElement(List<XNode> list) {
    for (XNode parameterMapNode : list) {
        String id = parameterMapNode.getStringAttribute("id");
        String type = parameterMapNode.getStringAttribute("type");
        Class<?> parameterClass = resolveClass(type);
        List<XNode> parameterNodes = parameterMapNode.evalNodes("parameter");
        List<ParameterMapping> parameterMappings = new ArrayList<>();
        for (XNode parameterNode : parameterNodes) {
            String property = parameterNode.getStringAttribute("property");
            String javaType = parameterNode.getStringAttribute("javaType");
            String jdbcType = parameterNode.getStringAttribute("jdbcType");
            String resultMap = parameterNode.getStringAttribute("resultMap");
            String mode = parameterNode.getStringAttribute("mode");
            String typeHandler = parameterNode.getStringAttribute("typeHandler");
            Integer numericScale = parameterNode.getIntAttribute("numericScale");
            ParameterMode modeEnum = resolveParameterMode(mode);
            Class<?> javaTypeClass = resolveClass(javaType);
            JdbcType jdbcTypeEnum = resolveJdbcType(jdbcType);
            Class<? extends TypeHandler<?>> typeHandlerClass = resolveClass(typeHandler);
            ParameterMapping parameterMapping = builderAssistant.buildParameterMapping(parameterClass, property, javaTypeClass, jdbcTypeEnum, resultMap, modeEnum, typeHandlerClass, numericScale);
            parameterMappings.add(parameterMapping);
        }
        builderAssistant.addParameterMap(id, parameterClass, parameterMappings);
    }
}
Also used : ParameterMode(org.apache.ibatis.mapping.ParameterMode) ParameterMapping(org.apache.ibatis.mapping.ParameterMapping) XNode(org.apache.ibatis.parsing.XNode) ArrayList(java.util.ArrayList) JdbcType(org.apache.ibatis.type.JdbcType)

Example 37 with ParameterMapping

use of org.apache.ibatis.mapping.ParameterMapping in project mybatis-3 by mybatis.

the class BaseExecutor method handleLocallyCachedOutputParameters.

private void handleLocallyCachedOutputParameters(MappedStatement ms, CacheKey key, Object parameter, BoundSql boundSql) {
    if (ms.getStatementType() == StatementType.CALLABLE) {
        final Object cachedParameter = localOutputParameterCache.getObject(key);
        if (cachedParameter != null && parameter != null) {
            final MetaObject metaCachedParameter = configuration.newMetaObject(cachedParameter);
            final MetaObject metaParameter = configuration.newMetaObject(parameter);
            for (ParameterMapping parameterMapping : boundSql.getParameterMappings()) {
                if (parameterMapping.getMode() != ParameterMode.IN) {
                    final String parameterName = parameterMapping.getProperty();
                    final Object cachedValue = metaCachedParameter.getValue(parameterName);
                    metaParameter.setValue(parameterName, cachedValue);
                }
            }
        }
    }
}
Also used : ParameterMapping(org.apache.ibatis.mapping.ParameterMapping) MetaObject(org.apache.ibatis.reflection.MetaObject) MetaObject(org.apache.ibatis.reflection.MetaObject)

Example 38 with ParameterMapping

use of org.apache.ibatis.mapping.ParameterMapping in project mybatis-paginator by HuQingmiao.

the class DefaultParameterHandler method setParameters.

public void setParameters(PreparedStatement ps) throws SQLException {
    ErrorContext.instance().activity("setting parameters").object(mappedStatement.getParameterMap().getId());
    List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
    if (parameterMappings != null) {
        MetaObject metaObject = parameterObject == null ? null : configuration.newMetaObject(parameterObject);
        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)) {
                    // issue #448 ask first for additional params
                    value = boundSql.getAdditionalParameter(propertyName);
                } else if (parameterObject == null) {
                    value = null;
                } else if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
                    value = parameterObject;
                } else {
                    value = metaObject == null ? null : metaObject.getValue(propertyName);
                }
                TypeHandler typeHandler = parameterMapping.getTypeHandler();
                if (typeHandler == null) {
                    throw new ExecutorException("There was no TypeHandler found for parameter " + propertyName + " of statement " + mappedStatement.getId());
                }
                JdbcType jdbcType = parameterMapping.getJdbcType();
                if (value == null && jdbcType == null)
                    jdbcType = configuration.getJdbcTypeForNull();
                typeHandler.setParameter(ps, i + 1, value, jdbcType);
            }
        }
    }
}
Also used : ExecutorException(org.apache.ibatis.executor.ExecutorException) ParameterMapping(org.apache.ibatis.mapping.ParameterMapping) MetaObject(org.apache.ibatis.reflection.MetaObject) JdbcType(org.apache.ibatis.type.JdbcType) MetaObject(org.apache.ibatis.reflection.MetaObject) TypeHandler(org.apache.ibatis.type.TypeHandler)

Example 39 with ParameterMapping

use of org.apache.ibatis.mapping.ParameterMapping in project mybatis-paginator by HuQingmiao.

the class Dialect method setPageParameter.

protected void setPageParameter(String name, Object value, Class type) {
    ParameterMapping parameterMapping = new ParameterMapping.Builder(mappedStatement.getConfiguration(), name, type).build();
    parameterMappings.add(parameterMapping);
    pageParameters.put(name, value);
}
Also used : ParameterMapping(org.apache.ibatis.mapping.ParameterMapping)

Example 40 with ParameterMapping

use of org.apache.ibatis.mapping.ParameterMapping in project dq-easy-cloud by dq-open-cloud.

the class EcSqlParserUtil method handleSql.

/**
 * 处理拦截的sql,主要包括格式化去掉空格,将传入的参数填值进去
 *
 * @param interceptSql
 * @param mappedStatement
 * @param boundSql
 * @return String
 */
public static String handleSql(String interceptSql, MappedStatement mappedStatement, BoundSql boundSql) {
    String sql = interceptSql.replaceAll("[\\s]+", " ").trim();
    Configuration configuration = mappedStatement.getConfiguration();
    Object parameterObject = boundSql.getParameterObject();
    List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
    try {
        if (parameterObject != null && parameterMappings != null && !parameterMappings.isEmpty()) {
            TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
            if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) {
                sql = sql.replaceFirst("\\?", getParameterValue(parameterObject));
            } else {
                MetaObject metaObject = configuration.newMetaObject(parameterObject);
                for (ParameterMapping parameterMapping : parameterMappings) {
                    String propertyName = parameterMapping.getProperty();
                    if (metaObject.hasGetter(propertyName)) {
                        Object obj = metaObject.getValue(propertyName);
                        sql = sql.replaceFirst("\\?", getParameterValue(obj));
                    } else if (boundSql.hasAdditionalParameter(propertyName)) {
                        Object obj = boundSql.getAdditionalParameter(propertyName);
                        sql = sql.replaceFirst("\\?", getParameterValue(obj));
                    }
                }
            }
        }
    } catch (Exception e) {
        throw new RuntimeException("Parse sql exception, " + sql, e);
    }
    return sql;
}
Also used : TypeHandlerRegistry(org.apache.ibatis.type.TypeHandlerRegistry) Configuration(org.apache.ibatis.session.Configuration) ParameterMapping(org.apache.ibatis.mapping.ParameterMapping) MetaObject(org.apache.ibatis.reflection.MetaObject) MetaObject(org.apache.ibatis.reflection.MetaObject)

Aggregations

ParameterMapping (org.apache.ibatis.mapping.ParameterMapping)40 MetaObject (org.apache.ibatis.reflection.MetaObject)18 ArrayList (java.util.ArrayList)17 TypeHandlerRegistry (org.apache.ibatis.type.TypeHandlerRegistry)15 MappedStatement (org.apache.ibatis.mapping.MappedStatement)9 StaticSqlSource (org.apache.ibatis.builder.StaticSqlSource)8 Configuration (org.apache.ibatis.session.Configuration)5 PropertyColumnMapping (com.qiuyj.mybatis.PropertyColumnMapping)4 StaticTextSqlNode (org.apache.ibatis.scripting.xmltags.StaticTextSqlNode)4 JdbcType (org.apache.ibatis.type.JdbcType)4 TypeHandler (org.apache.ibatis.type.TypeHandler)4 StringJoiner (java.util.StringJoiner)3 Section (org.apache.ibatis.domain.blog.Section)3 SQL (org.apache.ibatis.jdbc.SQL)3 BoundSql (org.apache.ibatis.mapping.BoundSql)3 BeanExampleResolver (com.qiuyj.mybatis.BeanExampleResolver)2 Conditionable (indi.mybatis.flying.models.Conditionable)2 SQLException (java.sql.SQLException)2 HashMap (java.util.HashMap)2 List (java.util.List)2