Example usage for org.apache.ibatis.mapping ParameterMapping.Builder numericScale

List of usage examples for org.apache.ibatis.mapping ParameterMapping.Builder numericScale

Introduction

In this page you can find the example usage for org.apache.ibatis.mapping ParameterMapping.Builder numericScale.

Prototype

Integer numericScale

To view the source code for org.apache.ibatis.mapping ParameterMapping.Builder numericScale.

Click Source Link

Usage

From source file:com.ibatis.sqlmap.engine.builder.InlineParameterMapParser.java

License:Apache License

private ParameterMapping newParseMapping(String token, Class<?> parameterClass) {

    // #propertyName,javaType=string,jdbcType=VARCHAR,mode=IN,nullValue=N/A,handler=string,numericScale=2#

    StringTokenizer paramParser = new StringTokenizer(token, "=, ", false);
    String propertyName = paramParser.nextToken();
    TypeHandler<?> typeHandler = null;
    Class<?> javaType = null;
    JdbcType jdbcType = null;//from   ww  w.j  a  v a2  s.  c  o m
    ParameterMode parameterMode = null;
    Integer numericScale = null;

    while (paramParser.hasMoreTokens()) {
        String field = paramParser.nextToken();
        if (paramParser.hasMoreTokens()) {
            String value = paramParser.nextToken();
            if ("javaType".equals(field)) {
                try {
                    javaType = typeAliasRegistry.resolveAlias(value);
                } catch (Exception e) {
                    throw new SqlMapException("Error loading javaType class");
                }
            } else if ("jdbcType".equals(field)) {
                jdbcType = JdbcType.valueOf(value);
            } else if ("mode".equals(field)) {
                parameterMode = ParameterMode.valueOf(value);
            } else if ("nullValue".equals(field)) {
                throw new UnsupportedOperationException("iBATIS 3 does not support null value substitution.");
            } else if ("handler".equals(field)) {
                try {
                    Object impl = typeAliasRegistry.resolveAlias(value).newInstance();
                    typeHandler = ((TypeHandler<?>) impl);
                } catch (Exception e) {
                    throw new SqlMapException(
                            "Error loading class specified by handler field in " + token + ".  Cause: " + e, e);
                }
            } else if ("numericScale".equals(field)) {
                try {
                    numericScale = Integer.valueOf(value);
                    if (numericScale < 0) {
                        throw new SqlMapException(
                                "Value specified for numericScale must be greater than or equal to zero");
                    }
                } catch (NumberFormatException e) {
                    throw new SqlMapException("Value specified for numericScale is not a valid Integer");
                }
            } else {
                throw new SqlMapException("Unrecognized parameter mapping field: '" + field + "' in " + token);
            }
        } else {
            throw new SqlMapException(
                    "Incorrect inline parameter map format (missmatched name=value pairs): " + token);
        }
    }

    if (typeHandler == null) {
        if (parameterClass == null) {
            typeHandler = typeHandlerRegistry.getUnknownTypeHandler();
        } else {
            String javaTypeString = javaType == null ? null : javaType.getName();
            typeHandler = resolveTypeHandler(parameterClass, propertyName, javaTypeString, jdbcType);
        }
    }

    if (propertyName != null && propertyName.startsWith("[")) {
        propertyName = "_collection" + propertyName;
    }

    ParameterMapping.Builder mapping = new ParameterMapping.Builder(configuration, propertyName, typeHandler);
    mapping.javaType(javaType);
    mapping.jdbcType(jdbcType);
    mapping.mode(parameterMode);
    mapping.numericScale(numericScale);

    return mapping.build();
}

From source file:com.ibatis.sqlmap.engine.builder.XmlSqlMapParser.java

License:Apache License

@NodeEvent("/sqlMap/parameterMap/parameter")
public void sqlMapparameterMapparameter(XNode context) throws Exception {
    String nullValue = context.getStringAttribute("nullValue");
    if (nullValue != null) {
        throw new UnsupportedOperationException("Null value subsitution is not supported by iBATIS 3.");
    }// w  w  w .j av a2s.co m

    String propertyName = context.getStringAttribute("property");
    String jdbcType = context.getStringAttribute("jdbcType");
    String javaType = context.getStringAttribute("javaType");
    String resultMap = context.getStringAttribute("resultMap");
    String mode = context.getStringAttribute("mode");
    String callback = context.getStringAttribute("typeHandler");
    String numericScaleProp = context.getStringAttribute("numericScale");

    Class javaClass = null;
    try {
        if (javaType != null && javaType.length() > 0) {
            javaClass = config.getTypeAliasRegistry().resolveAlias(javaType);
        }
    } catch (Exception e) {
        throw new RuntimeException("Error setting javaType on parameter mapping.  Cause: " + e);
    }

    JdbcType jdbcTypeEnum = null;
    if (jdbcType != null) {
        jdbcTypeEnum = JdbcType.valueOf(jdbcType);
    }

    TypeHandler typeHandler = null;
    if (javaClass != null) {
        typeHandler = config.getTypeHandlerRegistry().getTypeHandler(javaClass, jdbcTypeEnum);
    }
    if (callback != null) {
        Object o = config.getTypeAliasRegistry().resolveAlias(callback).newInstance();
        if (o instanceof TypeHandlerCallback) {
            typeHandler = new TypeHandlerCallbackAdapter((TypeHandlerCallback) o);
        }
    }
    if (typeHandler == null && config.getTypeHandlerRegistry().hasTypeHandler(parameterMapBuilder.type())) {
        typeHandler = config.getTypeHandlerRegistry().getTypeHandler(parameterMapBuilder.type());
    }
    if (typeHandler == null) {
        Class parameterClass = parameterMapBuilder.type();
        if (parameterClass != null && !Map.class.isAssignableFrom(parameterClass)) {
            MetaClass metaParamClass = MetaClass.forClass(parameterClass);
            Class paramType = null;
            if (metaParamClass.hasGetter(propertyName)) {
                paramType = metaParamClass.getGetterType(propertyName);
            } else if (metaParamClass.hasSetter(propertyName)) {
                paramType = metaParamClass.getSetterType(propertyName);
            }
            if (paramType != null) {
                typeHandler = config.getTypeHandlerRegistry().getTypeHandler(paramType);
            }
        } else {
            typeHandler = config.getTypeHandlerRegistry().getUnknownTypeHandler();
        }
    }

    ParameterMode paramModeEnum = ParameterMode.IN;
    if (mode != null) {
        paramModeEnum = ParameterMode.valueOf(mode);
    }

    Integer numericScale = null;
    if (numericScaleProp != null) {
        numericScale = new Integer(numericScaleProp);
    }

    ParameterMapping.Builder parameterMappingBuilder = new ParameterMapping.Builder(config, propertyName,
            typeHandler);
    parameterMappingBuilder.javaType(javaClass);
    parameterMappingBuilder.jdbcType(jdbcTypeEnum);
    parameterMappingBuilder.mode(paramModeEnum);
    parameterMappingBuilder.numericScale(numericScale);
    parameterMappingBuilder.resultMapId(resultMap);

    parameterMappingList.add(parameterMappingBuilder.build());
}