Browse Source

优化代码.

nieqiuqiu 6 years ago
parent
commit
b2b41993cb

+ 29 - 34
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/spring/MybatisSqlSessionFactoryBean.java

@@ -21,13 +21,18 @@ import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.MybatisXMLConfigBuilder;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
 import com.baomidou.mybatisplus.core.enums.IEnum;
-import com.baomidou.mybatisplus.core.toolkit.*;
+import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
+import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.handlers.EnumAnnotationTypeHandler;
 import com.baomidou.mybatisplus.extension.handlers.EnumTypeHandler;
 import com.baomidou.mybatisplus.extension.toolkit.AopUtils;
 import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
 import com.baomidou.mybatisplus.extension.toolkit.PackageHelper;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+
 import org.apache.ibatis.builder.xml.XMLMapperBuilder;
 import org.apache.ibatis.cache.Cache;
 import org.apache.ibatis.executor.ErrorContext;
@@ -58,14 +63,21 @@ import org.springframework.core.NestedIOException;
 import org.springframework.core.io.Resource;
 import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
 
-import javax.sql.DataSource;
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.Set;
 import java.util.stream.Stream;
 
+import javax.sql.DataSource;
+
 import static org.springframework.util.Assert.notNull;
 import static org.springframework.util.Assert.state;
 import static org.springframework.util.ObjectUtils.isEmpty;
@@ -456,20 +468,12 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
 
 
         // TODO 无配置启动所必须的
-        if (this.globalConfig == null) {
-            this.globalConfig = GlobalConfigUtils.defaults();
-        }
-        if (this.globalConfig.getDbConfig() == null) {
-            this.globalConfig.setDbConfig(new GlobalConfig.DbConfig());
-        }
+        this.globalConfig = Optional.ofNullable(this.globalConfig).orElseGet(GlobalConfigUtils::defaults);
+        this.globalConfig.setDbConfig(Optional.ofNullable(this.globalConfig.getDbConfig()).orElseGet(GlobalConfig.DbConfig::new));
 
         // TODO 初始化 id-work 以及 打印骚东西
         configuration.init(this.globalConfig);
 
-        if (this.objectFactory != null) {
-            configuration.setObjectFactory(this.objectFactory);
-        }
-
         Optional.ofNullable(this.objectFactory).ifPresent(configuration::setObjectFactory);
         Optional.ofNullable(this.objectWrapperFactory).ifPresent(configuration::setObjectWrapperFactory);
         Optional.ofNullable(this.vfs).ifPresent(configuration::setVfsImpl);
@@ -531,15 +535,18 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
             }
             // 取得类型转换注册器
             TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
-            for (Class cls : classes) {
+            classes.forEach(cls ->{
                 if (cls.isEnum()) {
                     if (IEnum.class.isAssignableFrom(cls)) {
                         // 接口方式
                         typeHandlerRegistry.register(cls, EnumTypeHandler.class);
                     } else {
                         // 注解方式
-                        Class<?> clazz = dealEnumType(cls);
-                        if (null != clazz) {
+                        Optional<Field> optional = dealEnumType(cls);
+                        if (optional.isPresent()) {
+                            Field field = optional.get();
+                            field.setAccessible(true);
+                            EnumAnnotationTypeHandler.addEnumType(cls, field);
                             typeHandlerRegistry.register(cls, EnumAnnotationTypeHandler.class);
                         } else {
                             // 原生方式
@@ -547,7 +554,7 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
                         }
                     }
                 }
-            }
+            });
         }
 
         if (!isEmpty(this.typeAliases)) {
@@ -601,11 +608,9 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
             }
         }
 
-        if (this.transactionFactory == null) {
-            this.transactionFactory = new SpringManagedTransactionFactory();
-        }
-
-        configuration.setEnvironment(new Environment(this.environment, this.transactionFactory, this.dataSource));
+        configuration.setEnvironment(new Environment(this.environment,
+            this.transactionFactory == null ? new SpringManagedTransactionFactory() : this.transactionFactory,
+            this.dataSource));
 
         // TODO 设置元数据相关 如果用户没有配置 dbType 则自动获取
         if (globalConfig.getDbConfig().getDbType() == DbType.OTHER) {
@@ -656,18 +661,8 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
     /**
      * 处理普通枚举 把带{@link EnumValue}的field注册到处理器中
      */
-    protected Class<?> dealEnumType(Class<?> clazz) {
-        if (clazz.isEnum()) {
-            Field[] fields = clazz.getDeclaredFields();
-            for (Field f : fields) {
-                if (f.isAnnotationPresent(EnumValue.class)) {
-                    f.setAccessible(true);
-                    EnumAnnotationTypeHandler.addEnumType(clazz, f);
-                    return clazz;
-                }
-            }
-        }
-        return null;
+    protected Optional<Field> dealEnumType(Class<?> clazz) {
+        return clazz.isEnum() ? Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(EnumValue.class)).findFirst() : Optional.empty();
     }
 
     /**