瀏覽代碼

[优化] 一些初始化方法放到 MybatisSqlSessionFactoryBuilder.build 内

miemie 6 年之前
父節點
當前提交
4ca62cc1ba

+ 8 - 24
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisConfiguration.java

@@ -16,8 +16,9 @@
 package com.baomidou.mybatisplus.core;
 
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
-import com.baomidou.mybatisplus.core.injector.SqlRunnerInjector;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import lombok.Getter;
+import lombok.Setter;
 import org.apache.ibatis.binding.MapperRegistry;
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
@@ -36,12 +37,16 @@ import org.apache.ibatis.session.SqlSession;
  */
 public class MybatisConfiguration extends Configuration {
     private static final Log logger = LogFactory.getLog(MybatisConfiguration.class);
-
     /**
      * Mapper 注册
      */
     protected final MybatisMapperRegistry mybatisMapperRegistry = new MybatisMapperRegistry(this);
 
+    // TODO 自己的 GlobalConfig
+    @Setter
+    @Getter
+    private GlobalConfig globalConfig = GlobalConfigUtils.defaults();
+
     public MybatisConfiguration(Environment environment) {
         this();
         this.environment = environment;
@@ -56,27 +61,6 @@ public class MybatisConfiguration extends Configuration {
         languageRegistry.setDefaultDriverClass(MybatisXMLLanguageDriver.class);
     }
 
-    /**
-     * 配置初始化
-     */
-    public void init(GlobalConfig globalConfig) {
-        // 初始化 Sequence
-        if (null != globalConfig.getWorkerId()
-            && null != globalConfig.getDatacenterId()) {
-            IdWorker.initSequence(globalConfig.getWorkerId(), globalConfig.getDatacenterId());
-        }
-        if (globalConfig.isEnableSqlRunner()) {
-            new SqlRunnerInjector().inject(this);
-        }
-        // 打印 Banner
-        if (globalConfig.isBanner()) {
-            System.out.println(" _ _   |_  _ _|_. ___ _ |    _ ");
-            System.out.println("| | |\\/|_)(_| | |_\\  |_)||_|_\\ ");
-            System.out.println("     /               |         ");
-            System.out.println("                        " + MybatisPlusVersion.getVersion() + " ");
-        }
-    }
-
     /**
      * MybatisPlus 加载 SQL 顺序:
      * <p>1、加载XML中的SQL</p>

+ 27 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisSqlSessionFactoryBuilder.java

@@ -15,8 +15,12 @@
  */
 package com.baomidou.mybatisplus.core;
 
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.core.injector.SqlRunnerInjector;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import org.apache.ibatis.exceptions.ExceptionFactory;
 import org.apache.ibatis.executor.ErrorContext;
+import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
@@ -50,7 +54,7 @@ public class MybatisSqlSessionFactoryBuilder extends SqlSessionFactoryBuilder {
             }
         }
     }
-    
+
     @SuppressWarnings("Duplicates")
     @Override
     public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
@@ -69,4 +73,26 @@ public class MybatisSqlSessionFactoryBuilder extends SqlSessionFactoryBuilder {
             }
         }
     }
+
+    // TODO 使用自己的逻辑,注入必须组件
+    @Override
+    public SqlSessionFactory build(Configuration config) {
+        MybatisConfiguration configuration = (MybatisConfiguration) config;
+        GlobalConfig globalConfig = configuration.getGlobalConfig();
+        // 初始化 Sequence
+        if (null != globalConfig.getWorkerId()
+            && null != globalConfig.getDatacenterId()) {
+            IdWorker.initSequence(globalConfig.getWorkerId(), globalConfig.getDatacenterId());
+        }
+        if (globalConfig.isEnableSqlRunner()) {
+            new SqlRunnerInjector().inject(configuration);
+        }
+
+        SqlSessionFactory sqlSessionFactory = super.build(configuration);
+
+        // 设置全局参数属性 以及 缓存 sqlSessionFactory
+        globalConfig.signGlobalConfig(sqlSessionFactory);
+
+        return sqlSessionFactory;
+    }
 }

+ 9 - 3
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/spring/MybatisSqlSessionFactoryBean.java

@@ -17,6 +17,7 @@ package com.baomidou.mybatisplus.extension.spring;
 
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.MybatisPlusVersion;
 import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;
 import com.baomidou.mybatisplus.core.MybatisXMLConfigBuilder;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
@@ -473,7 +474,7 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
         this.globalConfig.setDbConfig(Optional.ofNullable(this.globalConfig.getDbConfig()).orElseGet(GlobalConfig.DbConfig::new));
 
         // TODO 初始化 id-work 以及 打印骚东西
-        targetConfiguration.init(this.globalConfig);
+        targetConfiguration.setGlobalConfig(this.globalConfig);
 
         // TODO 自动注入 map 接收返回结果下是否下划线转驼峰
         if (targetConfiguration.isMapUnderscoreToCamelCase()) {
@@ -612,8 +613,13 @@ public class MybatisSqlSessionFactoryBean implements FactoryBean<SqlSessionFacto
         // TODO SqlRunner
         SqlHelper.FACTORY = sqlSessionFactory;
 
-        // TODO 设置全局参数属性 以及 缓存 sqlSessionFactory
-        globalConfig.signGlobalConfig(sqlSessionFactory);
+        // TODO 打印骚东西 Banner
+        if (globalConfig.isBanner()) {
+            System.out.println(" _ _   |_  _ _|_. ___ _ |    _ ");
+            System.out.println("| | |\\/|_)(_| | |_\\  |_)||_|_\\ ");
+            System.out.println("     /               |         ");
+            System.out.println("                        " + MybatisPlusVersion.getVersion() + " ");
+        }
 
         return sqlSessionFactory;
     }