Преглед изворни кода

Merge remote-tracking branch 'origin/dev' into dev

= пре 8 година
родитељ
комит
2d118184ec
21 измењених фајлова са 372 додато и 612 уклоњено
  1. 17 77
      src/main/java/com/baomidou/mybatisplus/MybatisMapperAnnotationBuilder.java
  2. 11 14
      src/main/java/com/baomidou/mybatisplus/MybatisXMLConfigBuilder.java
  3. 0 435
      src/main/java/com/baomidou/mybatisplus/MybatisXMLMapperBuilder.java
  4. 5 17
      src/main/java/com/baomidou/mybatisplus/annotations/TableField.java
  5. 10 23
      src/main/java/com/baomidou/mybatisplus/entity/TableFieldInfo.java
  6. 65 0
      src/main/java/com/baomidou/mybatisplus/enums/FieldIgnore.java
  7. 9 3
      src/main/java/com/baomidou/mybatisplus/enums/FieldStrategy.java
  8. 5 2
      src/main/java/com/baomidou/mybatisplus/mapper/AutoSqlInjector.java
  9. 19 21
      src/main/java/com/baomidou/mybatisplus/spring/MybatisSqlSessionFactoryBean.java
  10. 9 10
      src/test/java/com/baomidou/mybatisplus/test/mysql/UserMapperTest.java
  11. 48 0
      src/test/java/com/baomidou/mybatisplus/test/oracle/OracleUserTest.java
  12. 16 3
      src/test/java/com/baomidou/mybatisplus/test/oracle/TestSequserMapperTest.java
  13. 1 0
      src/test/java/com/baomidou/mybatisplus/test/oracle/TestUserMapperTest.java
  14. 41 0
      src/test/java/com/baomidou/mybatisplus/test/oracle/config/OracleDBConfig.java
  15. 60 0
      src/test/java/com/baomidou/mybatisplus/test/oracle/config/OracleMybatisPlusConfig.java
  16. 11 3
      src/test/java/com/baomidou/mybatisplus/test/oracle/entity/TestSequser.java
  17. 7 2
      src/test/java/com/baomidou/mybatisplus/test/oracle/mapper/TestSequserMapper.java
  18. 1 1
      src/test/java/com/baomidou/mybatisplus/test/oracle/mapper/TestUserMapper.java
  19. 15 0
      src/test/java/com/baomidou/mybatisplus/test/oracle/service/OracleUserSeqService.java
  20. 21 0
      src/test/java/com/baomidou/mybatisplus/test/oracle/service/impl/OracleUserSeqServiceImpl.java
  21. 1 1
      src/test/resources/oracle/TestUserMapper.xml

+ 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 - 17
src/main/java/com/baomidou/mybatisplus/annotations/TableField.java

@@ -15,13 +15,14 @@
  */
 package com.baomidou.mybatisplus.annotations;
 
+import com.baomidou.mybatisplus.enums.FieldIgnore;
+import com.baomidou.mybatisplus.enums.FieldStrategy;
+
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import com.baomidou.mybatisplus.enums.FieldStrategy;
-
 /**
  * <p>
  * 表字段标识
@@ -74,21 +75,8 @@ public @interface TableField {
 
     /**
      * <p>
-     * 是否插入忽略
-     * </p>
-     * <p>
-     * 默认为false,即不忽略
-     * </p>
-     */
-    boolean insertIgnore() default false;
-
-    /**
-     * <p>
-     * 是否更新忽略
-     * </p>
-     * <p>
-     * 默认为false,即不忽略
+     * 字段忽略策略
      * </p>
      */
-    boolean updateIgnore() default false;
+    FieldIgnore ignore() default FieldIgnore.DEFAULT;
 }

+ 10 - 23
src/main/java/com/baomidou/mybatisplus/entity/TableFieldInfo.java

@@ -15,14 +15,15 @@
  */
 package com.baomidou.mybatisplus.entity;
 
-import java.lang.reflect.Field;
-
 import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.annotations.TableLogic;
+import com.baomidou.mybatisplus.enums.FieldIgnore;
 import com.baomidou.mybatisplus.enums.FieldStrategy;
 import com.baomidou.mybatisplus.toolkit.SqlReservedWords;
 import com.baomidou.mybatisplus.toolkit.StringUtils;
 
+import java.lang.reflect.Field;
+
 /**
  * <p>
  * 数据库表字段反射信息
@@ -76,14 +77,9 @@ public class TableFieldInfo {
     private String logicNotDeleteValue;
 
     /**
-     * 插入忽
+     * 字段忽略策
      */
-    private boolean insertIgnore = false;
-
-    /**
-     * 更新忽略
-     */
-    private boolean updateIgnore = false;
+    private FieldIgnore fieldIgnore = FieldIgnore.DEFAULT;
 
     /**
      * <p>
@@ -124,8 +120,7 @@ public class TableFieldInfo {
 		/*
 		 * 保存当前字段的插入忽略,更新忽略值
 		 */
-		this.insertIgnore = tableField.insertIgnore();
-        this.updateIgnore = tableField.updateIgnore();
+		this.fieldIgnore = tableField.ignore();
     }
 
     public TableFieldInfo(GlobalConfiguration globalConfig, TableInfo tableInfo, Field field) {
@@ -250,19 +245,11 @@ public class TableFieldInfo {
         this.logicNotDeleteValue = logicNotDeleteValue;
     }
 
-    public boolean isInsertIgnore() {
-        return insertIgnore;
-    }
-
-    public void setInsertIgnore(boolean insertIgnore) {
-        this.insertIgnore = insertIgnore;
-    }
-
-    public boolean isUpdateIgnore() {
-        return updateIgnore;
+    public FieldIgnore getFieldIgnore() {
+        return fieldIgnore;
     }
 
-    public void setUpdateIgnore(boolean updateIgnore) {
-        this.updateIgnore = updateIgnore;
+    public void setFieldIgnore(FieldIgnore fieldIgnore) {
+        this.fieldIgnore = fieldIgnore;
     }
 }

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

@@ -0,0 +1,65 @@
+/**
+ * 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.enums;
+
+/**
+ * <p>
+ * 字段忽略策略枚举类
+ * </p>
+ *
+ * @author hubin
+ * @Date 2016-09-09
+ */
+public enum FieldIgnore {
+    DEFAULT(0, "默认方式"),
+    INSERT(1, "忽略插入"),
+    UPDATE(2, "忽略更新"),
+    INSERT_UPDATE(3, "忽略插入和更新");
+
+    /**
+     * 主键
+     */
+    private final int key;
+
+    /**
+     * 描述
+     */
+    private final String desc;
+
+    FieldIgnore(final int key, final String desc) {
+        this.key = key;
+        this.desc = desc;
+    }
+
+    public static FieldIgnore getIgnore(int key) {
+        FieldIgnore[] fis = FieldIgnore.values();
+        for (FieldIgnore fi : fis) {
+            if (fi.getKey() == key) {
+                return fi;
+            }
+        }
+        return FieldIgnore.DEFAULT;
+    }
+
+    public int getKey() {
+        return this.key;
+    }
+
+    public String getDesc() {
+        return this.desc;
+    }
+
+}

+ 9 - 3
src/main/java/com/baomidou/mybatisplus/enums/FieldStrategy.java

@@ -24,12 +24,18 @@ package com.baomidou.mybatisplus.enums;
  * @Date 2016-09-09
  */
 public enum FieldStrategy {
-    IGNORED(0, "ignored"), NOT_NULL(1, "not null"), NOT_EMPTY(2, "not empty");
+    IGNORED(0, "忽略判断"),
+    NOT_NULL(1, "非 NULL 判断"),
+    NOT_EMPTY(2, "非空判断");
 
-    /** 主键 */
+    /**
+     * 主键
+     */
     private final int key;
 
-    /** 描述 */
+    /**
+     * 描述
+     */
     private final String desc;
 
     FieldStrategy(final int key, final String desc) {

+ 5 - 2
src/main/java/com/baomidou/mybatisplus/mapper/AutoSqlInjector.java

@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.baomidou.mybatisplus.enums.FieldIgnore;
 import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator;
 import org.apache.ibatis.executor.keygen.KeyGenerator;
@@ -240,7 +241,8 @@ public class AutoSqlInjector implements ISqlInjector {
 
         for (TableFieldInfo fieldInfo : fieldList) {
             /* 判断是否插入忽略,插入忽略就不生成这个SQL */
-            if (fieldInfo.isInsertIgnore()) {
+            // TODO 忽略策略待完善
+            if (fieldInfo.getFieldIgnore() == FieldIgnore.INSERT) {
                 continue;
             }
             if (selective) {
@@ -532,7 +534,8 @@ public class AutoSqlInjector implements ISqlInjector {
         List<TableFieldInfo> fieldList = table.getFieldList();
         for (TableFieldInfo fieldInfo : fieldList) {
             /* 判断是不是更新忽略,是的话不生成此SQL */
-            if (fieldInfo.isUpdateIgnore()) {
+            // TODO 忽略策略待完善
+            if (fieldInfo.getFieldIgnore() == FieldIgnore.UPDATE) {
                 continue;
             }
             if (selective) {

+ 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);

+ 48 - 0
src/test/java/com/baomidou/mybatisplus/test/oracle/OracleUserTest.java

@@ -0,0 +1,48 @@
+package com.baomidou.mybatisplus.test.oracle;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.test.oracle.config.OracleDBConfig;
+import com.baomidou.mybatisplus.test.oracle.config.OracleMybatisPlusConfig;
+import com.baomidou.mybatisplus.test.oracle.entity.TestSequser;
+import com.baomidou.mybatisplus.test.oracle.mapper.TestSequserMapper;
+
+/**
+ * <p>
+ * oracle user test for spring
+ * </p>
+ *
+ * @author yuxiaobin
+ * @date 2017/6/14
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = {OracleDBConfig.class, OracleMybatisPlusConfig.class})
+public class OracleUserTest {
+
+    @Autowired
+    TestSequserMapper sequserMapper;
+
+    @Test
+    public void testSelectListMp(){
+        List<TestSequser> list = sequserMapper.selectList(new EntityWrapper<TestSequser>());
+        for(TestSequser u:list){
+            System.out.println(u);
+        }
+    }
+
+    @Test
+    public void testSelectListNative(){
+        List<TestSequser> list = sequserMapper.getList();
+        for(TestSequser u:list){
+            System.out.println(u);
+        }
+    }
+
+}

+ 16 - 3
src/test/java/com/baomidou/mybatisplus/test/oracle/TestSequserMapperTest.java

@@ -25,7 +25,9 @@ import org.apache.ibatis.session.SqlSessionFactory;
 import com.baomidou.mybatisplus.MybatisSessionFactoryBuilder;
 import com.baomidou.mybatisplus.entity.GlobalConfiguration;
 import com.baomidou.mybatisplus.entity.OracleKeyGenerator;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.test.oracle.entity.TestSequser;
+import com.baomidou.mybatisplus.test.oracle.mapper.TestSequserMapper;
 
 
 /**
@@ -66,7 +68,7 @@ public class TestSequserMapperTest {
         TestSequser one = new TestSequser("abc", 18, 1);
         int rlt = testSequserMapper.insert(one);
         System.err.println("\n one.id-------:" + one.getId());
-        sleep();
+//        sleep();
 
         /**
          * 批量插入
@@ -80,8 +82,19 @@ public class TestSequserMapperTest {
         for (TestSequser u : ul) {
             rlt = testSequserMapper.insert(u);
         }
-        for (TestSequser u : ul) {
-            System.err.println("\n one.id-------:" + u.getId());
+//        for (TestSequser u : ul) {
+//            System.err.println("\n one.id-------:" + u.getId());
+//        }
+
+        System.out.println("********************");
+        List<TestSequser> testList = testSequserMapper.getList();
+        for (TestSequser u : testList) {
+            System.out.println(u);
+        }
+
+        testList = testSequserMapper.selectList(new EntityWrapper<TestSequser>());
+        for (TestSequser u : testList) {
+            System.out.println(u);
         }
         
         /**

+ 1 - 0
src/test/java/com/baomidou/mybatisplus/test/oracle/TestUserMapperTest.java

@@ -27,6 +27,7 @@ import com.baomidou.mybatisplus.entity.GlobalConfiguration;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.test.oracle.entity.TestUser;
+import com.baomidou.mybatisplus.test.oracle.mapper.TestUserMapper;
 
 /**
  * <p>

+ 41 - 0
src/test/java/com/baomidou/mybatisplus/test/oracle/config/OracleDBConfig.java

@@ -0,0 +1,41 @@
+package com.baomidou.mybatisplus.test.oracle.config;
+
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.jdbc.datasource.SimpleDriverDataSource;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import oracle.jdbc.OracleDriver;
+
+
+/**
+ * 对应的数据库配置
+ * 
+ * @author yuxiaobin
+ *
+ */
+@Configuration
+@EnableTransactionManagement
+public class OracleDBConfig {
+
+	@Bean
+    public DataSource dataSource() throws SQLException {
+		SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
+		dataSource.setDriver(new OracleDriver());
+        dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
+        dataSource.setUsername("mp");
+        dataSource.setPassword("mp");
+        return dataSource;
+    }
+	
+	@Bean
+	public DataSourceTransactionManager transactionManager(DataSource ds) {
+		return new DataSourceTransactionManager(ds);
+	}
+
+}

+ 60 - 0
src/test/java/com/baomidou/mybatisplus/test/oracle/config/OracleMybatisPlusConfig.java

@@ -0,0 +1,60 @@
+package com.baomidou.mybatisplus.test.oracle.config;
+
+import javax.sql.DataSource;
+
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.type.JdbcType;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ResourceLoader;
+
+import com.baomidou.mybatisplus.MybatisConfiguration;
+import com.baomidou.mybatisplus.MybatisXMLLanguageDriver;
+import com.baomidou.mybatisplus.entity.GlobalConfiguration;
+import com.baomidou.mybatisplus.entity.OracleKeyGenerator;
+import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
+
+/**
+ * <p>
+ * Mybatis Plus Config
+ * </p>
+ *
+ * @author Caratacus
+ * @date 2017/4/1
+ */
+@Configuration
+@MapperScan("com.baomidou.mybatisplus.test.oracle.mapper")
+public class OracleMybatisPlusConfig {
+
+    @Bean
+    public SqlSessionFactory sqlSessionFactory(DataSource dataSource, ResourceLoader resourceLoader, GlobalConfiguration globalConfiguration) throws Exception {
+        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
+        sqlSessionFactory.setDataSource(dataSource);
+        sqlSessionFactory.setTypeAliasesPackage("com.baomidou.mybatisplus.test.oracle.entity");
+        MybatisConfiguration configuration = new MybatisConfiguration();
+        configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
+        configuration.setJdbcTypeForNull(JdbcType.NULL);
+        configuration.setMapUnderscoreToCamelCase(true);
+        sqlSessionFactory.setConfiguration(configuration);
+        PaginationInterceptor pagination = new PaginationInterceptor();
+        pagination.setDialectType("oracle");
+        sqlSessionFactory.setPlugins(new Interceptor[]{
+                pagination
+        });
+        sqlSessionFactory.setGlobalConfig(globalConfiguration);
+        return sqlSessionFactory.getObject();
+    }
+
+    @Bean
+    public GlobalConfiguration globalConfiguration() {
+        GlobalConfiguration conf = new GlobalConfiguration();
+        conf.setIdType(1);
+        conf.setDbType("oracle");
+        conf.setKeyGenerator(new OracleKeyGenerator());
+//        conf.setDbColumnUnderline(true);
+        return conf;
+    }
+}

+ 11 - 3
src/test/java/com/baomidou/mybatisplus/test/oracle/entity/TestSequser.java

@@ -2,9 +2,7 @@ package com.baomidou.mybatisplus.test.oracle.entity;
 
 import java.io.Serializable;
 
-import com.baomidou.mybatisplus.annotations.KeySequence;
 import com.baomidou.mybatisplus.annotations.TableField;
-import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
 
 /**
@@ -26,17 +24,19 @@ public class TestSequser  extends BaseTestEntity implements Serializable{
     /**
      * 名称
      */
+	@TableField(value = "NAME")
     private String name;
 
     /**
      * 年龄
      */
+	@TableField(value = "age")
     private Integer age;
     
     /**
      * 测试下划线字段命名类型
      */
-    //@TableField(value = "TEST_TYPE")
+    @TableField(value = "TEST_TYPE")
     private Integer testType;
 
     public TestSequser() {
@@ -82,4 +82,12 @@ public class TestSequser  extends BaseTestEntity implements Serializable{
 		this.testType = testType;
 	}
 
+	@Override
+	public String toString() {
+		return "TestSequser{" +
+				"name='" + name + '\'' +
+				", age=" + age +
+				", testType=" + testType +
+				'}';
+	}
 }

+ 7 - 2
src/test/java/com/baomidou/mybatisplus/test/oracle/TestSequserMapper.java → src/test/java/com/baomidou/mybatisplus/test/oracle/mapper/TestSequserMapper.java

@@ -1,4 +1,8 @@
-package com.baomidou.mybatisplus.test.oracle;
+package com.baomidou.mybatisplus.test.oracle.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Select;
 
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 import com.baomidou.mybatisplus.test.oracle.entity.TestSequser;
@@ -8,5 +12,6 @@ import com.baomidou.mybatisplus.test.oracle.entity.TestSequser;
  */
 public interface TestSequserMapper extends BaseMapper<TestSequser> {
 
-
+    @Select("select * from TEST_SEQUSER")
+    public List<TestSequser> getList();
 }

+ 1 - 1
src/test/java/com/baomidou/mybatisplus/test/oracle/TestUserMapper.java → src/test/java/com/baomidou/mybatisplus/test/oracle/mapper/TestUserMapper.java

@@ -1,4 +1,4 @@
-package com.baomidou.mybatisplus.test.oracle;
+package com.baomidou.mybatisplus.test.oracle.mapper;
 
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 import com.baomidou.mybatisplus.test.oracle.entity.TestUser;

+ 15 - 0
src/test/java/com/baomidou/mybatisplus/test/oracle/service/OracleUserSeqService.java

@@ -0,0 +1,15 @@
+package com.baomidou.mybatisplus.test.oracle.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.baomidou.mybatisplus.test.oracle.entity.TestSequser;
+
+/**
+ * <p>
+ * </p>
+ *
+ * @author yuxiaobin
+ * @date 2017/6/14
+ */
+public interface OracleUserSeqService extends IService<TestSequser> {
+
+}

+ 21 - 0
src/test/java/com/baomidou/mybatisplus/test/oracle/service/impl/OracleUserSeqServiceImpl.java

@@ -0,0 +1,21 @@
+package com.baomidou.mybatisplus.test.oracle.service.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.test.oracle.entity.TestSequser;
+import com.baomidou.mybatisplus.test.oracle.mapper.TestSequserMapper;
+import com.baomidou.mybatisplus.test.oracle.service.OracleUserSeqService;
+
+/**
+ * <p>
+ * </p>
+ *
+ * @author yuxiaobin
+ * @date 2017/6/14
+ */
+@Service
+public class OracleUserSeqServiceImpl extends ServiceImpl<TestSequserMapper, TestSequser> implements OracleUserSeqService{
+
+
+}

+ 1 - 1
src/test/resources/oracle/TestUserMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.baomidou.mybatisplus.test.oracle.TestUserMapper">
+<mapper namespace="com.baomidou.mybatisplus.test.oracle.mapper.TestUserMapper">
 
 	<!-- 通用查询结果列-->
 	<sql id="Base_Column_List">