浏览代码

优化 xml 部分加载

jobob 8 年之前
父节点
当前提交
1bfb091162

+ 17 - 77
src/main/java/com/baomidou/mybatisplus/MybatisMapperAnnotationBuilder.java

@@ -15,49 +15,11 @@
  */
 package com.baomidou.mybatisplus;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.ibatis.annotations.Arg;
-import org.apache.ibatis.annotations.CacheNamespace;
-import org.apache.ibatis.annotations.CacheNamespaceRef;
-import org.apache.ibatis.annotations.Case;
-import org.apache.ibatis.annotations.ConstructorArgs;
-import org.apache.ibatis.annotations.Delete;
-import org.apache.ibatis.annotations.DeleteProvider;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.InsertProvider;
-import org.apache.ibatis.annotations.Lang;
-import org.apache.ibatis.annotations.MapKey;
-import org.apache.ibatis.annotations.Options;
+import com.baomidou.mybatisplus.entity.GlobalConfiguration;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.*;
 import org.apache.ibatis.annotations.Options.FlushCachePolicy;
-import org.apache.ibatis.annotations.Property;
-import org.apache.ibatis.annotations.Result;
 import org.apache.ibatis.annotations.ResultMap;
-import org.apache.ibatis.annotations.ResultType;
-import org.apache.ibatis.annotations.Results;
-import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.SelectKey;
-import org.apache.ibatis.annotations.SelectProvider;
-import org.apache.ibatis.annotations.TypeDiscriminator;
-import org.apache.ibatis.annotations.Update;
-import org.apache.ibatis.annotations.UpdateProvider;
 import org.apache.ibatis.binding.BindingException;
 import org.apache.ibatis.binding.MapperMethod.ParamMap;
 import org.apache.ibatis.builder.BuilderException;
@@ -66,21 +28,14 @@ import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.apache.ibatis.builder.annotation.MapperAnnotationBuilder;
 import org.apache.ibatis.builder.annotation.MethodResolver;
 import org.apache.ibatis.builder.annotation.ProviderSqlSource;
+import org.apache.ibatis.builder.xml.XMLMapperBuilder;
 import org.apache.ibatis.cursor.Cursor;
 import org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator;
 import org.apache.ibatis.executor.keygen.KeyGenerator;
 import org.apache.ibatis.executor.keygen.NoKeyGenerator;
 import org.apache.ibatis.executor.keygen.SelectKeyGenerator;
 import org.apache.ibatis.io.Resources;
-import org.apache.ibatis.mapping.Discriminator;
-import org.apache.ibatis.mapping.FetchType;
-import org.apache.ibatis.mapping.MappedStatement;
-import org.apache.ibatis.mapping.ResultFlag;
-import org.apache.ibatis.mapping.ResultMapping;
-import org.apache.ibatis.mapping.ResultSetType;
-import org.apache.ibatis.mapping.SqlCommandType;
-import org.apache.ibatis.mapping.SqlSource;
-import org.apache.ibatis.mapping.StatementType;
+import org.apache.ibatis.mapping.*;
 import org.apache.ibatis.parsing.PropertyParser;
 import org.apache.ibatis.reflection.TypeParameterResolver;
 import org.apache.ibatis.scripting.LanguageDriver;
@@ -91,8 +46,11 @@ import org.apache.ibatis.type.JdbcType;
 import org.apache.ibatis.type.TypeHandler;
 import org.apache.ibatis.type.UnknownTypeHandler;
 
-import com.baomidou.mybatisplus.entity.GlobalConfiguration;
-import com.baomidou.mybatisplus.mapper.BaseMapper;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.*;
+import java.util.*;
 
 /**
  * <p>
@@ -131,14 +89,16 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
     public void parse() {
         String resource = type.toString();
         if (!configuration.isResourceLoaded(resource)) {
-            boolean existXml = loadXmlResource();
+            loadXmlResource();
             configuration.addLoadedResource(resource);
             assistant.setCurrentNamespace(type.getName());
             parseCache();
             parseCacheRef();
             Method[] methods = type.getMethods();
-            // TODO 注入存在 xxMapper.xml CURD (应该在注解之前注入)
-            inspectInject(existXml);
+            // TODO 注入 CURD 动态 SQL (应该在注解之前注入)
+            if (BaseMapper.class.isAssignableFrom(type)) {
+                GlobalConfiguration.getSqlInjector(configuration).inspectInject(assistant, type);
+            }
             for (Method method : methods) {
                 try {
                     // issue #237
@@ -153,15 +113,6 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
         parsePendingMethods();
     }
 
-    /*
-     * 注入 CURD 动态 SQL(XML不存在时注入)
-     */
-    private void inspectInject(boolean flag) {
-        if (!flag && BaseMapper.class.isAssignableFrom(type)) {
-            GlobalConfiguration.getSqlInjector(configuration).inspectInject(assistant, type);
-        }
-    }
-
     private void parsePendingMethods() {
         Collection<MethodResolver> incompleteMethods = configuration.getIncompleteMethods();
         synchronized (incompleteMethods) {
@@ -177,15 +128,7 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
         }
     }
 
-    /**
-     * <p>
-     * 是否存在XML(该方法并不能客观的判断resource的路径,只是Mybatis默认认为的xml路径)
-     * </p>
-     *
-     * @return true 存在, false 不存在
-     */
-    private boolean loadXmlResource() {
-        boolean flag = true;
+    private void loadXmlResource() {
         // Spring may not know the real resource name so we check a flag
         // to prevent loading again a resource twice
         // this flag is set at XMLMapperBuilder#bindMapperForNamespace
@@ -196,15 +139,12 @@ public class MybatisMapperAnnotationBuilder extends MapperAnnotationBuilder {
                 inputStream = Resources.getResourceAsStream(type.getClassLoader(), xmlResource);
             } catch (IOException e) {
                 // ignore, resource is not required
-                flag = false;
             }
             if (inputStream != null) {
-                MybatisXMLMapperBuilder xmlParser = new MybatisXMLMapperBuilder(inputStream, assistant.getConfiguration(),
-                        xmlResource, configuration.getSqlFragments(), type.getName());
+                XMLMapperBuilder xmlParser = new XMLMapperBuilder(inputStream, assistant.getConfiguration(), xmlResource, configuration.getSqlFragments(), type.getName());
                 xmlParser.parse();
             }
         }
-        return flag;
     }
 
     private void parseCache() {

+ 11 - 14
src/main/java/com/baomidou/mybatisplus/MybatisXMLConfigBuilder.java

@@ -15,16 +15,9 @@
  */
 package com.baomidou.mybatisplus;
 
-import java.io.InputStream;
-import java.io.Reader;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.sql.DataSource;
-
 import org.apache.ibatis.builder.BaseBuilder;
 import org.apache.ibatis.builder.BuilderException;
+import org.apache.ibatis.builder.xml.XMLMapperBuilder;
 import org.apache.ibatis.builder.xml.XMLMapperEntityResolver;
 import org.apache.ibatis.datasource.DataSourceFactory;
 import org.apache.ibatis.executor.ErrorContext;
@@ -43,14 +36,17 @@ import org.apache.ibatis.reflection.MetaClass;
 import org.apache.ibatis.reflection.ReflectorFactory;
 import org.apache.ibatis.reflection.factory.ObjectFactory;
 import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
-import org.apache.ibatis.session.AutoMappingBehavior;
-import org.apache.ibatis.session.AutoMappingUnknownColumnBehavior;
-import org.apache.ibatis.session.Configuration;
-import org.apache.ibatis.session.ExecutorType;
-import org.apache.ibatis.session.LocalCacheScope;
+import org.apache.ibatis.session.*;
 import org.apache.ibatis.transaction.TransactionFactory;
 import org.apache.ibatis.type.JdbcType;
 
+import javax.sql.DataSource;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
+
 /**
  * <p>
  * Copy from XMLConfigBuilder in Mybatis and replace default Configuration class
@@ -363,6 +359,7 @@ public class MybatisXMLConfigBuilder extends BaseBuilder {
         }
     }
 
+    // TODO 这里需要优化
     private void mapperElement(XNode parent) throws Exception {
         /**
          * 定义集合 用来分类放置mybatis的Mapper与XML 按顺序依次遍历
@@ -378,7 +375,7 @@ public class MybatisXMLConfigBuilder extends BaseBuilder {
                 ErrorContext.instance().resource(resource);
                 InputStream inputStream = Resources.getResourceAsStream(resource);
                 //TODO
-                MybatisXMLMapperBuilder mapperParser = new MybatisXMLMapperBuilder(inputStream, configuration, resource,
+                XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource,
                         configuration.getSqlFragments());
                 mapperParser.parse();
             }

+ 0 - 435
src/main/java/com/baomidou/mybatisplus/MybatisXMLMapperBuilder.java

@@ -1,435 +0,0 @@
-/**
- * Copyright (c) 2011-2014, hubin (jobob@qq.com).
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.baomidou.mybatisplus;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.ibatis.builder.BaseBuilder;
-import org.apache.ibatis.builder.BuilderException;
-import org.apache.ibatis.builder.CacheRefResolver;
-import org.apache.ibatis.builder.IncompleteElementException;
-import org.apache.ibatis.builder.MapperBuilderAssistant;
-import org.apache.ibatis.builder.ResultMapResolver;
-import org.apache.ibatis.builder.xml.XMLMapperEntityResolver;
-import org.apache.ibatis.builder.xml.XMLStatementBuilder;
-import org.apache.ibatis.cache.Cache;
-import org.apache.ibatis.executor.ErrorContext;
-import org.apache.ibatis.io.Resources;
-import org.apache.ibatis.mapping.Discriminator;
-import org.apache.ibatis.mapping.ParameterMapping;
-import org.apache.ibatis.mapping.ParameterMode;
-import org.apache.ibatis.mapping.ResultFlag;
-import org.apache.ibatis.mapping.ResultMap;
-import org.apache.ibatis.mapping.ResultMapping;
-import org.apache.ibatis.parsing.XNode;
-import org.apache.ibatis.parsing.XPathParser;
-import org.apache.ibatis.session.Configuration;
-import org.apache.ibatis.type.JdbcType;
-import org.apache.ibatis.type.TypeHandler;
-
-import com.baomidou.mybatisplus.entity.GlobalConfiguration;
-import com.baomidou.mybatisplus.mapper.BaseMapper;
-
-/**
- * <p>
- * org.apache.ibatis.builder.xml.XMLMapperBuilder
- * </p>
- * <p>
- * injector curdSql
- * </p>
- *
- * @author Clinton Begin hubin
- * @Date 2016-06-13
- */
-public class MybatisXMLMapperBuilder extends BaseBuilder {
-
-    private XPathParser parser;
-    private MapperBuilderAssistant builderAssistant;
-    private Map<String, XNode> sqlFragments;
-    private String resource;
-
-    @Deprecated
-    public MybatisXMLMapperBuilder(Reader reader, Configuration configuration, String resource, Map<String, XNode> sqlFragments, String namespace) {
-        this(reader, configuration, resource, sqlFragments);
-        this.builderAssistant.setCurrentNamespace(namespace);
-    }
-
-    @Deprecated
-    public MybatisXMLMapperBuilder(Reader reader, Configuration configuration, String resource, Map<String, XNode> sqlFragments) {
-        this(new XPathParser(reader, true, configuration.getVariables(), new XMLMapperEntityResolver()),
-                configuration, resource, sqlFragments);
-    }
-
-    public MybatisXMLMapperBuilder(InputStream inputStream, Configuration configuration, String resource, Map<String, XNode> sqlFragments, String namespace) {
-        this(inputStream, configuration, resource, sqlFragments);
-        this.builderAssistant.setCurrentNamespace(namespace);
-    }
-
-    public MybatisXMLMapperBuilder(InputStream inputStream, Configuration configuration, String resource, Map<String, XNode> sqlFragments) {
-        this(new XPathParser(inputStream, true, configuration.getVariables(), new XMLMapperEntityResolver()),
-                configuration, resource, sqlFragments);
-    }
-
-    private MybatisXMLMapperBuilder(XPathParser parser, Configuration configuration, String resource, Map<String, XNode> sqlFragments) {
-        super(configuration);
-        this.builderAssistant = new MapperBuilderAssistant(configuration, resource);
-        this.parser = parser;
-        this.sqlFragments = sqlFragments;
-        this.resource = resource;
-    }
-
-    public void parse() {
-        if (!configuration.isResourceLoaded(resource)) {
-            configurationElement(parser.evalNode("/mapper"));
-            configuration.addLoadedResource(resource);
-            bindMapperForNamespace();
-        }
-
-        parsePendingResultMaps();
-        parsePendingCacheRefs();
-        parsePendingStatements();
-    }
-
-    public XNode getSqlFragment(String refid) {
-        return sqlFragments.get(refid);
-    }
-
-    private void configurationElement(XNode context) {
-        try {
-            String namespace = context.getStringAttribute("namespace");
-            if (namespace == null || 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);
-        }
-    }
-
-    private void buildStatementFromContext(List<XNode> list) {
-        if (configuration.getDatabaseId() != null) {
-            buildStatementFromContext(list, configuration.getDatabaseId());
-        }
-        buildStatementFromContext(list, null);
-    }
-
-    private void buildStatementFromContext(List<XNode> list, String requiredDatabaseId) {
-        for (XNode context : list) {
-            final XMLStatementBuilder statementParser = new XMLStatementBuilder(configuration, builderAssistant, context, requiredDatabaseId);
-            try {
-                statementParser.parseStatementNode();
-            } catch (IncompleteElementException e) {
-                configuration.addIncompleteStatement(statementParser);
-            }
-        }
-    }
-
-    private void parsePendingResultMaps() {
-        Collection<ResultMapResolver> incompleteResultMaps = configuration.getIncompleteResultMaps();
-        synchronized (incompleteResultMaps) {
-            Iterator<ResultMapResolver> iter = incompleteResultMaps.iterator();
-            while (iter.hasNext()) {
-                try {
-                    iter.next().resolve();
-                    iter.remove();
-                } catch (IncompleteElementException e) {
-                    // ResultMap is still missing a resource...
-                }
-            }
-        }
-    }
-
-    private void parsePendingCacheRefs() {
-        Collection<CacheRefResolver> incompleteCacheRefs = configuration.getIncompleteCacheRefs();
-        synchronized (incompleteCacheRefs) {
-            Iterator<CacheRefResolver> iter = incompleteCacheRefs.iterator();
-            while (iter.hasNext()) {
-                try {
-                    iter.next().resolveCacheRef();
-                    iter.remove();
-                } catch (IncompleteElementException e) {
-                    // Cache ref is still missing a resource...
-                }
-            }
-        }
-    }
-
-    private void parsePendingStatements() {
-        Collection<XMLStatementBuilder> incompleteStatements = configuration.getIncompleteStatements();
-        synchronized (incompleteStatements) {
-            Iterator<XMLStatementBuilder> iter = incompleteStatements.iterator();
-            while (iter.hasNext()) {
-                try {
-                    iter.next().parseStatementNode();
-                    iter.remove();
-                } catch (IncompleteElementException e) {
-                    // Statement is still missing a resource...
-                }
-            }
-        }
-    }
-
-    private void cacheRefElement(XNode context) {
-        if (context != null) {
-            configuration.addCacheRef(builderAssistant.getCurrentNamespace(), context.getStringAttribute("namespace"));
-            CacheRefResolver cacheRefResolver = new CacheRefResolver(builderAssistant, context.getStringAttribute("namespace"));
-            try {
-                cacheRefResolver.resolveCacheRef();
-            } catch (IncompleteElementException e) {
-                configuration.addIncompleteCacheRef(cacheRefResolver);
-            }
-        }
-    }
-
-    private void cacheElement(XNode context) throws Exception {
-        if (context != null) {
-            String type = context.getStringAttribute("type", "PERPETUAL");
-            Class<? extends Cache> typeClass = typeAliasRegistry.resolveAlias(type);
-            String eviction = context.getStringAttribute("eviction", "LRU");
-            Class<? extends Cache> evictionClass = typeAliasRegistry.resolveAlias(eviction);
-            Long flushInterval = context.getLongAttribute("flushInterval");
-            Integer size = context.getIntAttribute("size");
-            boolean readWrite = !context.getBooleanAttribute("readOnly", false);
-            boolean blocking = context.getBooleanAttribute("blocking", false);
-            Properties props = context.getChildrenAsProperties();
-            builderAssistant.useNewCache(typeClass, evictionClass, flushInterval, size, readWrite, blocking, props);
-        }
-    }
-
-    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<>();
-            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);
-                ParameterMapping parameterMapping = builderAssistant.buildParameterMapping(parameterClass, property, javaTypeClass, jdbcTypeEnum, resultMap, modeEnum, typeHandlerClass, numericScale);
-                parameterMappings.add(parameterMapping);
-            }
-            builderAssistant.addParameterMap(id, parameterClass, parameterMappings);
-        }
-    }
-
-    private void resultMapElements(List<XNode> list) throws Exception {
-        for (XNode resultMapNode : list) {
-            try {
-                resultMapElement(resultMapNode);
-            } catch (IncompleteElementException e) {
-                // ignore, it will be retried
-            }
-        }
-    }
-
-    private ResultMap resultMapElement(XNode resultMapNode) throws Exception {
-        return resultMapElement(resultMapNode, Collections.<ResultMapping> emptyList());
-    }
-
-    private ResultMap resultMapElement(XNode resultMapNode, List<ResultMapping> additionalResultMappings) throws Exception {
-        ErrorContext.instance().activity("processing " + resultMapNode.getValueBasedIdentifier());
-        String id = resultMapNode.getStringAttribute("id", resultMapNode.getValueBasedIdentifier());
-        String type = resultMapNode.getStringAttribute("type", resultMapNode.getStringAttribute("ofType",
-                resultMapNode.getStringAttribute("resultType", resultMapNode.getStringAttribute("javaType"))));
-        String extend = resultMapNode.getStringAttribute("extends");
-        Boolean autoMapping = resultMapNode.getBooleanAttribute("autoMapping");
-        Class<?> typeClass = resolveClass(type);
-        Discriminator discriminator = null;
-        List<ResultMapping> resultMappings = new ArrayList<>();
-        resultMappings.addAll(additionalResultMappings);
-        List<XNode> resultChildren = resultMapNode.getChildren();
-        for (XNode resultChild : resultChildren) {
-            if ("constructor".equals(resultChild.getName())) {
-                processConstructorElement(resultChild, typeClass, resultMappings);
-            } else if ("discriminator".equals(resultChild.getName())) {
-                discriminator = processDiscriminatorElement(resultChild, typeClass, resultMappings);
-            } else {
-                List<ResultFlag> flags = new ArrayList<>();
-                if ("id".equals(resultChild.getName())) {
-                    flags.add(ResultFlag.ID);
-                }
-                resultMappings.add(buildResultMappingFromContext(resultChild, typeClass, flags));
-            }
-        }
-        ResultMapResolver resultMapResolver = new ResultMapResolver(builderAssistant, id, typeClass, extend, discriminator, resultMappings, autoMapping);
-        try {
-            return resultMapResolver.resolve();
-        } catch (IncompleteElementException  e) {
-            configuration.addIncompleteResultMap(resultMapResolver);
-            throw e;
-        }
-    }
-
-    private void processConstructorElement(XNode resultChild, Class<?> resultType, List<ResultMapping> resultMappings) throws Exception {
-        List<XNode> argChildren = resultChild.getChildren();
-        for (XNode argChild : argChildren) {
-            List<ResultFlag> flags = new ArrayList<>();
-            flags.add(ResultFlag.CONSTRUCTOR);
-            if ("idArg".equals(argChild.getName())) {
-                flags.add(ResultFlag.ID);
-            }
-            resultMappings.add(buildResultMappingFromContext(argChild, resultType, flags));
-        }
-    }
-
-    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);
-        JdbcType jdbcTypeEnum = resolveJdbcType(jdbcType);
-        Map<String, String> discriminatorMap = new HashMap<>();
-        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);
-    }
-
-    private void sqlElement(List<XNode> list) throws Exception {
-        if (configuration.getDatabaseId() != null) {
-            sqlElement(list, configuration.getDatabaseId());
-        }
-        sqlElement(list, null);
-    }
-
-    private void sqlElement(List<XNode> list, String requiredDatabaseId) throws Exception {
-        for (XNode context : list) {
-            String databaseId = context.getStringAttribute("databaseId");
-            String id = context.getStringAttribute("id");
-            id = builderAssistant.applyCurrentNamespace(id, false);
-            if (databaseIdMatchesCurrent(id, databaseId, requiredDatabaseId)) {
-                sqlFragments.put(id, context);
-            }
-        }
-    }
-
-    private boolean databaseIdMatchesCurrent(String id, String databaseId, String requiredDatabaseId) {
-        if (requiredDatabaseId != null) {
-            if (!requiredDatabaseId.equals(databaseId)) {
-                return false;
-            }
-        } else {
-            if (databaseId != null) {
-                return false;
-            }
-            // skip this fragment if there is a previous one with a not null databaseId
-            if (this.sqlFragments.containsKey(id)) {
-                XNode context = this.sqlFragments.get(id);
-                if (context.getStringAttribute("databaseId") != null) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    private ResultMapping buildResultMappingFromContext(XNode context, Class<?> resultType, List<ResultFlag> flags) throws Exception {
-        String property;
-        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);
-    }
-
-    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();
-            }
-        }
-        return null;
-    }
-
-    private void bindMapperForNamespace() {
-        String namespace = builderAssistant.getCurrentNamespace();
-        if (namespace != null) {
-            Class<?> boundType = null;
-            try {
-                boundType = Resources.classForName(namespace);
-            } catch (ClassNotFoundException e) {
-                // ignore, bound type is not required
-            }
-            if (boundType != null) {
-                if (!configuration.hasMapper(boundType)) {
-                    // Spring may not know the real resource name so we set a
-                    // flag
-                    // to prevent loading again this resource from the mapper
-                    // interface
-                    // look at MapperAnnotationBuilder#loadXmlResource
-                    configuration.addLoadedResource("namespace:" + namespace);
-                    configuration.addMapper(boundType);
-                }
-                //TODO 注入 CURD 动态 SQL
-                if (BaseMapper.class.isAssignableFrom(boundType)) {
-                    GlobalConfiguration.getSqlInjector(configuration).inspectInject(builderAssistant, boundType);
-                }
-            }
-        }
-    }
-
-}

+ 5 - 5
src/main/java/com/baomidou/mybatisplus/enums/FieldIgnore.java

@@ -27,7 +27,7 @@ public enum FieldIgnore {
     DEFAULT(0, "默认方式"),
     INSERT(1, "忽略插入"),
     UPDATE(2, "忽略更新"),
-    INSERT_AND_UPDATE(3, "忽略插入和更新");
+    INSERT_UPDATE(3, "忽略插入和更新");
 
     /**
      * 主键
@@ -45,10 +45,10 @@ public enum FieldIgnore {
     }
 
     public static FieldIgnore getIgnore(int key) {
-        FieldIgnore[] fss = FieldIgnore.values();
-        for (FieldIgnore fs : fss) {
-            if (fs.getKey() == key) {
-                return fs;
+        FieldIgnore[] fis = FieldIgnore.values();
+        for (FieldIgnore fi : fis) {
+            if (fi.getKey() == key) {
+                return fi;
             }
         }
         return FieldIgnore.DEFAULT;

+ 19 - 21
src/main/java/com/baomidou/mybatisplus/spring/MybatisSqlSessionFactoryBean.java

@@ -15,18 +15,13 @@
  */
 package com.baomidou.mybatisplus.spring;
 
-import static org.springframework.util.Assert.notNull;
-import static org.springframework.util.Assert.state;
-import static org.springframework.util.ObjectUtils.isEmpty;
-import static org.springframework.util.StringUtils.hasLength;
-import static org.springframework.util.StringUtils.tokenizeToStringArray;
-
-import java.io.IOException;
-import java.sql.SQLException;
-import java.util.Properties;
-
-import javax.sql.DataSource;
-
+import com.baomidou.mybatisplus.MybatisConfiguration;
+import com.baomidou.mybatisplus.MybatisXMLConfigBuilder;
+import com.baomidou.mybatisplus.entity.GlobalConfiguration;
+import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
+import com.baomidou.mybatisplus.mapper.SqlRunner;
+import com.baomidou.mybatisplus.toolkit.PackageHelper;
+import org.apache.ibatis.builder.xml.XMLMapperBuilder;
 import org.apache.ibatis.cache.Cache;
 import org.apache.ibatis.executor.ErrorContext;
 import org.apache.ibatis.io.VFS;
@@ -54,13 +49,16 @@ import org.springframework.core.NestedIOException;
 import org.springframework.core.io.Resource;
 import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
 
-import com.baomidou.mybatisplus.MybatisConfiguration;
-import com.baomidou.mybatisplus.MybatisXMLConfigBuilder;
-import com.baomidou.mybatisplus.MybatisXMLMapperBuilder;
-import com.baomidou.mybatisplus.entity.GlobalConfiguration;
-import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
-import com.baomidou.mybatisplus.mapper.SqlRunner;
-import com.baomidou.mybatisplus.toolkit.PackageHelper;
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import static org.springframework.util.Assert.notNull;
+import static org.springframework.util.Assert.state;
+import static org.springframework.util.ObjectUtils.isEmpty;
+import static org.springframework.util.StringUtils.hasLength;
+import static org.springframework.util.StringUtils.tokenizeToStringArray;
 
 /**
  * <p>
@@ -533,8 +531,8 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
                 }
 
                 try {
-                    // TODO
-                    MybatisXMLMapperBuilder xmlMapperBuilder = new MybatisXMLMapperBuilder(mapperLocation.getInputStream(),
+                    // TODO  这里也换了噢噢噢噢
+                    XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(mapperLocation.getInputStream(),
                             configuration, mapperLocation.toString(), configuration.getSqlFragments());
                     xmlMapperBuilder.parse();
                 } catch (Exception e) {

+ 9 - 10
src/test/java/com/baomidou/mybatisplus/test/mysql/UserMapperTest.java

@@ -15,15 +15,6 @@
  */
 package com.baomidou.mybatisplus.test.mysql;
 
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ibatis.session.SqlSession;
-import org.apache.ibatis.session.SqlSessionFactory;
-
 import com.baomidou.mybatisplus.MybatisSessionFactoryBuilder;
 import com.baomidou.mybatisplus.entity.GlobalConfiguration;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
@@ -33,6 +24,14 @@ import com.baomidou.mybatisplus.test.mysql.entity.Role;
 import com.baomidou.mybatisplus.test.mysql.entity.User;
 import com.baomidou.mybatisplus.test.mysql.mapper.UserMapper;
 import com.baomidou.mybatisplus.toolkit.IdWorker;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -85,7 +84,7 @@ public class UserMapperTest {
         /**
          * 设置,自定义 元对象填充器,实现公共字段自动写入
          */
-        gc.setMetaObjectHandler(new MyMetaObjectHandler());
+        //gc.setMetaObjectHandler(new MyMetaObjectHandler());
         // gc.setCapitalMode(true);
         gc.setDbColumnUnderline(true);
         mf.setGlobalConfig(gc);