Browse Source

注入默认主键生成器bean,修改sql注入器获取.

nieqiuqiu 5 năm trước cách đây
mục cha
commit
eb712bc8c1

+ 13 - 5
mybatis-plus-boot-starter/src/main/java/com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.java

@@ -19,6 +19,7 @@ package com.baomidou.mybatisplus.autoconfigure;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.baomidou.mybatisplus.core.incrementer.DefaultIdGenerator;
 import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
 import com.baomidou.mybatisplus.core.incrementer.IdGenerator;
 import com.baomidou.mybatisplus.core.injector.ISqlInjector;
@@ -218,11 +219,8 @@ public class MybatisPlusAutoConfiguration implements InitializingBean {
             ISqlInjector iSqlInjector = this.applicationContext.getBean(ISqlInjector.class);
             globalConfig.setSqlInjector(iSqlInjector);
         }
-        if (this.applicationContext.getBeanNamesForType(IdGenerator.class, false,
-            false).length > 0) {
-            IdGenerator idGenerator = this.applicationContext.getBean(IdGenerator.class);
-            globalConfig.setIdGenerator(idGenerator);
-        }
+        IdGenerator idGenerator = this.applicationContext.getBean(IdGenerator.class);
+        globalConfig.setIdGenerator(idGenerator);
         // TODO 设置 GlobalConfig 到 MybatisSqlSessionFactoryBean
         factory.setGlobalConfig(globalConfig);
         return factory.getObject();
@@ -254,6 +252,16 @@ public class MybatisPlusAutoConfiguration implements InitializingBean {
         }
     }
 
+    @Bean
+    @ConditionalOnMissingBean
+    public IdGenerator idGenerator() {
+        GlobalConfig globalConfig = this.properties.getGlobalConfig();
+        if (globalConfig.getWorkerId() != null && globalConfig.getDatacenterId() != null) {
+            return new DefaultIdGenerator(globalConfig.getWorkerId(), globalConfig.getDatacenterId());
+        }
+        return new DefaultIdGenerator();
+    }
+
     /**
      * This will just scan the same base package as Spring Boot does. If you want more power, you can explicitly use
      * {@link org.mybatis.spring.annotation.MapperScan} but this will get typed mappers working correctly, out-of-the-box,

+ 2 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
 import com.baomidou.mybatisplus.core.incrementer.IdGenerator;
+import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
 import com.baomidou.mybatisplus.core.injector.ISqlInjector;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
 import lombok.AccessLevel;
@@ -66,7 +67,7 @@ public class GlobalConfig implements Serializable {
     /**
      * SQL注入器
      */
-    private ISqlInjector sqlInjector;
+    private ISqlInjector sqlInjector = new DefaultSqlInjector();
     /**
      * Mapper父类
      */

+ 1 - 9
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/GlobalConfigUtils.java

@@ -20,7 +20,6 @@ import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
-import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
 import com.baomidou.mybatisplus.core.injector.ISqlInjector;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
@@ -75,14 +74,7 @@ public class GlobalConfigUtils {
     }
 
     public static ISqlInjector getSqlInjector(Configuration configuration) {
-        // fix #140
-        GlobalConfig globalConfiguration = getGlobalConfig(configuration);
-        ISqlInjector sqlInjector = globalConfiguration.getSqlInjector();
-        if (sqlInjector == null) {
-            sqlInjector = new DefaultSqlInjector();
-            globalConfiguration.setSqlInjector(sqlInjector);
-        }
-        return sqlInjector;
+        return getGlobalConfig(configuration).getSqlInjector();
     }
 
     public static MetaObjectHandler getMetaObjectHandler(Configuration configuration) {