Example usage for org.apache.ibatis.parsing XNode getStringAttribute

List of usage examples for org.apache.ibatis.parsing XNode getStringAttribute

Introduction

In this page you can find the example usage for org.apache.ibatis.parsing XNode getStringAttribute.

Prototype

public String getStringAttribute(String name) 

Source Link

Usage

From source file:com.baomidou.mybatisplus.MybatisXMLMapperBuilder.java

License:Apache License

private ResultMapping buildResultMappingFromContext(XNode context, Class<?> resultType, List<ResultFlag> flags)
        throws Exception {
    String property;//from   w w  w .  j  a va 2  s.  c  o m
    if (flags.contains(ResultFlag.CONSTRUCTOR)) {
        property = context.getStringAttribute("name");
    } else {
        property = context.getStringAttribute("property");
    }
    String column = context.getStringAttribute("column");
    String javaType = context.getStringAttribute("javaType");
    String jdbcType = context.getStringAttribute("jdbcType");
    String nestedSelect = context.getStringAttribute("select");
    String nestedResultMap = context.getStringAttribute("resultMap",
            processNestedResultMappings(context, Collections.<ResultMapping>emptyList()));
    String notNullColumn = context.getStringAttribute("notNullColumn");
    String columnPrefix = context.getStringAttribute("columnPrefix");
    String typeHandler = context.getStringAttribute("typeHandler");
    String resultSet = context.getStringAttribute("resultSet");
    String foreignColumn = context.getStringAttribute("foreignColumn");
    boolean lazy = "lazy".equals(
            context.getStringAttribute("fetchType", configuration.isLazyLoadingEnabled() ? "lazy" : "eager"));
    Class<?> javaTypeClass = resolveClass(javaType);
    @SuppressWarnings("unchecked")
    Class<? extends TypeHandler<?>> typeHandlerClass = (Class<? extends TypeHandler<?>>) resolveClass(
            typeHandler);
    JdbcType jdbcTypeEnum = resolveJdbcType(jdbcType);
    return builderAssistant.buildResultMapping(resultType, property, column, javaTypeClass, jdbcTypeEnum,
            nestedSelect, nestedResultMap, notNullColumn, columnPrefix, typeHandlerClass, flags, resultSet,
            foreignColumn, lazy);
}

From source file:com.baomidou.mybatisplus.MybatisXMLMapperBuilder.java

License:Apache License

private String processNestedResultMappings(XNode context, List<ResultMapping> resultMappings) throws Exception {
    if ("association".equals(context.getName()) || "collection".equals(context.getName())
            || "case".equals(context.getName())) {
        if (context.getStringAttribute("select") == null) {
            ResultMap resultMap = resultMapElement(context, resultMappings);
            return resultMap.getId();
        }/*from www.  j  a  v a2 s. co  m*/
    }
    return null;
}

From source file:com.baomidou.mybatisplus.spring.MybatisMapperRefresh.java

License:Apache License

/**
 * mapper/*ww w.  j a v a 2 s .  com*/
 *
 * @throws Exception
 */
@SuppressWarnings("rawtypes")
private void refresh(Resource resource)
        throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
    this.configuration = sqlSessionFactory.getConfiguration();
    boolean isSupper = configuration.getClass().getSuperclass() == Configuration.class;
    try {
        Field loadedResourcesField = isSupper
                ? configuration.getClass().getSuperclass().getDeclaredField("loadedResources")
                : configuration.getClass().getDeclaredField("loadedResources");
        loadedResourcesField.setAccessible(true);
        Set loadedResourcesSet = ((Set) loadedResourcesField.get(configuration));
        XPathParser xPathParser = new XPathParser(resource.getInputStream(), true, configuration.getVariables(),
                new XMLMapperEntityResolver());
        XNode context = xPathParser.evalNode("/mapper");
        String namespace = context.getStringAttribute("namespace");
        Field field = MapperRegistry.class.getDeclaredField("knownMappers");
        field.setAccessible(true);
        Map mapConfig = (Map) field.get(configuration.getMapperRegistry());
        mapConfig.remove(Resources.classForName(namespace));
        loadedResourcesSet.remove(resource.toString());
        configuration.getCacheNames().remove(namespace);
        cleanParameterMap(context.evalNodes("/mapper/parameterMap"), namespace);
        cleanResultMap(context.evalNodes("/mapper/resultMap"), namespace);
        cleanKeyGenerators(context.evalNodes("insert|update"), namespace);
        cleanSqlElement(context.evalNodes("/mapper/sql"), namespace);
        XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(resource.getInputStream(),
                sqlSessionFactory.getConfiguration(), // sql??
                resource.toString(), sqlSessionFactory.getConfiguration().getSqlFragments());
        xmlMapperBuilder.parse();
        logger.debug("refresh: '" + resource + "', success!");
    } catch (IOException e) {
        logger.error("Refresh IOException :" + e.getMessage());
    } finally {
        ErrorContext.instance().reset();
    }
}

From source file:com.baomidou.mybatisplus.spring.MybatisMapperRefresh.java

License:Apache License

/**
 * ?parameterMap//from  ww  w . j  av  a  2 s . co  m
 *
 * @param list
 * @param namespace
 */
private void cleanParameterMap(List<XNode> list, String namespace) {
    for (XNode parameterMapNode : list) {
        String id = parameterMapNode.getStringAttribute("id");
        configuration.getParameterMaps().remove(namespace + "." + id);
    }
}

From source file:com.baomidou.mybatisplus.spring.MybatisMapperRefresh.java

License:Apache License

private void clearResultMap(XNode xNode, String namespace) {
    for (XNode resultChild : xNode.getChildren()) {
        if ("association".equals(resultChild.getName()) || "collection".equals(resultChild.getName())
                || "case".equals(resultChild.getName())) {
            if (resultChild.getStringAttribute("select") == null) {
                configuration.getResultMapNames()
                        .remove(resultChild.getStringAttribute("id", resultChild.getValueBasedIdentifier()));
                configuration.getResultMapNames().remove(namespace + "."
                        + resultChild.getStringAttribute("id", resultChild.getValueBasedIdentifier()));
                if (resultChild.getChildren() != null && !resultChild.getChildren().isEmpty()) {
                    clearResultMap(resultChild, namespace);
                }//w w  w  .  j av a 2 s.  c om
            }
        }
    }
}

From source file:com.baomidou.mybatisplus.spring.MybatisMapperRefresh.java

License:Apache License

/**
 * ?selectKey/*from  w ww. j a  v a  2  s  . co m*/
 *
 * @param list
 * @param namespace
 */
private void cleanKeyGenerators(List<XNode> list, String namespace) {
    for (XNode context : list) {
        String id = context.getStringAttribute("id");
        configuration.getKeyGeneratorNames().remove(id + SelectKeyGenerator.SELECT_KEY_SUFFIX);
        configuration.getKeyGeneratorNames()
                .remove(namespace + "." + id + SelectKeyGenerator.SELECT_KEY_SUFFIX);
    }
}

From source file:com.baomidou.mybatisplus.spring.MybatisMapperRefresh.java

License:Apache License

/**
 * ?sql//from  w  w w . j ava2  s  .c  o  m
 *
 * @param list
 * @param namespace
 */
private void cleanSqlElement(List<XNode> list, String namespace) {
    for (XNode context : list) {
        String id = context.getStringAttribute("id");
        configuration.getSqlFragments().remove(id);
        configuration.getSqlFragments().remove(namespace + "." + id);
    }
}

From source file:com.dmm.framework.basedb.apache.ibatis.builder.xml.XMLMapperBuilder.java

License:Apache License

private void configurationElement(XNode context) {
    try {/*from  w w w.j a v a2 s .  co m*/
        String namespace = context.getStringAttribute("namespace");
        if (namespace.equals("")) {
            throw new BuilderException("Mapper's namespace cannot be empty");
        }
        builderAssistant.setCurrentNamespace(namespace);
        cacheRefElement(context.evalNode("cache-ref"));
        cacheElement(context.evalNode("cache"));
        parameterMapElement(context.evalNodes("/mapper/parameterMap"));
        resultMapElements(context.evalNodes("/mapper/resultMap"));
        sqlElement(context.evalNodes("/mapper/sql"));
        buildStatementFromContext(context.evalNodes("select|insert|update|delete"));
    } catch (Exception e) {
        throw new BuilderException("Error parsing Mapper XML. Cause: " + e, e);
    }
}

From source file:com.dmm.framework.basedb.apache.ibatis.builder.xml.XMLMapperBuilder.java

License:Apache License

private void parameterMapElement(List<XNode> list) throws Exception {
    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<ParameterMapping>();
        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);
            @SuppressWarnings("unchecked")
            Class<? extends TypeHandler<?>> typeHandlerClass = (Class<? extends TypeHandler<?>>) resolveClass(
                    typeHandler);//  www. j av a 2  s . c  o m
            ParameterMapping parameterMapping = builderAssistant.buildParameterMapping(parameterClass, property,
                    javaTypeClass, jdbcTypeEnum, resultMap, modeEnum, typeHandlerClass, numericScale);
            parameterMappings.add(parameterMapping);
        }
        builderAssistant.addParameterMap(id, parameterClass, parameterMappings);
    }
}

From source file:com.dmm.framework.basedb.apache.ibatis.builder.xml.XMLMapperBuilder.java

License:Apache License

private Discriminator processDiscriminatorElement(XNode context, Class<?> resultType,
        List<ResultMapping> resultMappings) throws Exception {
    String column = context.getStringAttribute("column");
    String javaType = context.getStringAttribute("javaType");
    String jdbcType = context.getStringAttribute("jdbcType");
    String typeHandler = context.getStringAttribute("typeHandler");
    Class<?> javaTypeClass = resolveClass(javaType);
    @SuppressWarnings("unchecked")
    Class<? extends TypeHandler<?>> typeHandlerClass = (Class<? extends TypeHandler<?>>) resolveClass(
            typeHandler);/*from   w w w  .j a v a 2 s . c  o m*/
    JdbcType jdbcTypeEnum = resolveJdbcType(jdbcType);
    Map<String, String> discriminatorMap = new HashMap<String, String>();
    for (XNode caseChild : context.getChildren()) {
        String value = caseChild.getStringAttribute("value");
        String resultMap = caseChild.getStringAttribute("resultMap",
                processNestedResultMappings(caseChild, resultMappings));
        discriminatorMap.put(value, resultMap);
    }
    return builderAssistant.buildDiscriminator(resultType, column, javaTypeClass, jdbcTypeEnum,
            typeHandlerClass, discriminatorMap);
}