Bläddra i källkod

还原Id生成器.

留到4.0再战了.
聂秋秋 5 år sedan
förälder
incheckning
308990a69e

+ 11 - 7
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisDefaultParameterHandler.java

@@ -159,16 +159,20 @@ public class MybatisDefaultParameterHandler extends DefaultParameterHandler {
      */
     protected static void populateKeys(TableInfo tableInfo, MetaObject metaObject, Object parameterObject) {
         // 填充主键
-        if (StringUtils.isNotBlank(tableInfo.getKeyProperty()) && null != tableInfo.getIdType()) {
-            GlobalConfigUtils.getGlobalConfig(tableInfo.getConfiguration()).getIdGenerator(tableInfo.getIdType()).ifPresent(idGenerator -> {
+        if (StringUtils.isNotBlank(tableInfo.getKeyProperty()) && null != tableInfo.getIdType() && tableInfo.getIdType().getKey() >= 3) {
+            GlobalConfigUtils.getGlobalConfig(tableInfo.getConfiguration()).getIdGenerator().ifPresent(idGenerator -> {
                 Object idValue = metaObject.getValue(tableInfo.getKeyProperty());
                 /* 自定义 ID */
                 if (StringUtils.checkValNull(idValue)) {
-                    // 应该只有数值型和字符串的区别了.
-                    if (Number.class.isAssignableFrom(tableInfo.getKeyType())) {
-                        metaObject.setValue(tableInfo.getKeyProperty(), idGenerator.generate(parameterObject));
-                    } else {
-                        metaObject.setValue(tableInfo.getKeyProperty(), idGenerator.generate(parameterObject).toString());
+                    if (IdType.ASSIGN_ID.getKey() == tableInfo.getIdType().getKey()) {
+                        // 应该只有数值型和字符串的区别了.
+                        if (Number.class.isAssignableFrom(tableInfo.getKeyType())) {
+                            metaObject.setValue(tableInfo.getKeyProperty(), idGenerator.generate(parameterObject));
+                        } else {
+                            metaObject.setValue(tableInfo.getKeyProperty(), idGenerator.generate(parameterObject).toString());
+                        }
+                    } else if (IdType.UUID.getKey() == tableInfo.getIdType().getKey()) {
+                        metaObject.setValue(tableInfo.getKeyProperty(), idGenerator.generateUUID(parameterObject));
                     }
                 }
             });

+ 3 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisSqlSessionFactoryBuilder.java

@@ -15,10 +15,9 @@
  */
 package com.baomidou.mybatisplus.core;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
 import com.baomidou.mybatisplus.core.incrementer.IdGenerator;
-import com.baomidou.mybatisplus.core.incrementer.SnowflakeGenerator;
+import com.baomidou.mybatisplus.core.incrementer.DefaultGenerator;
 import com.baomidou.mybatisplus.core.injector.SqlRunnerInjector;
 import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -84,8 +83,8 @@ public class MybatisSqlSessionFactoryBuilder extends SqlSessionFactoryBuilder {
         MybatisConfiguration configuration = (MybatisConfiguration) config;
         GlobalConfig globalConfig = GlobalConfigUtils.getGlobalConfig(configuration);
         if (null != globalConfig.getWorkerId() && null != globalConfig.getDatacenterId()) {
-            IdGenerator idGenerator = new SnowflakeGenerator(globalConfig.getWorkerId(), globalConfig.getDatacenterId());
-            globalConfig.registerIdGenerator(IdType.ASSIGN_ID, idGenerator);
+            IdGenerator idGenerator = new DefaultGenerator(globalConfig.getWorkerId(), globalConfig.getDatacenterId());
+            globalConfig.setIdGenerator(idGenerator);
             //TODO 这里只是为了兼容下,并没多大重要,方法标记过时了.
             IdWorker.setIdGenerator(idGenerator);
         }

+ 5 - 20
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java

@@ -20,20 +20,18 @@ 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.incrementer.SnowflakeGenerator;
+import com.baomidou.mybatisplus.core.incrementer.DefaultGenerator;
 import com.baomidou.mybatisplus.core.incrementer.UUIDGenerator;
 import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
 import com.baomidou.mybatisplus.core.injector.ISqlInjector;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
 import lombok.AccessLevel;
 import lombok.Data;
-import lombok.Getter;
 import lombok.Setter;
 import lombok.experimental.Accessors;
 import org.apache.ibatis.session.SqlSessionFactory;
 
 import java.io.Serializable;
-import java.util.Collections;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -58,7 +56,7 @@ public class GlobalConfig implements Serializable {
 
     static {
         defaultIdGeneratorMap.put(String.valueOf(IdType.UUID.getKey()), new UUIDGenerator());
-        defaultIdGeneratorMap.put(String.valueOf(IdType.ASSIGN_ID.getKey()), new SnowflakeGenerator());
+        defaultIdGeneratorMap.put(String.valueOf(IdType.ASSIGN_ID.getKey()), new DefaultGenerator());
     }
 
     /**
@@ -113,23 +111,10 @@ public class GlobalConfig implements Serializable {
     /**
      * 主键生成器
      */
-    @Setter(value = AccessLevel.NONE)
-    @Getter(value = AccessLevel.NONE)
-    private Map<String, IdGenerator> idGeneratorMap = new ConcurrentHashMap<>(defaultIdGeneratorMap);
-
-    /**
-     * 注册ID生成器
-     *
-     * @param idType      idType 暂时不开放string注册
-     * @param idGenerator 生成器
-     */
-    public GlobalConfig registerIdGenerator(IdType idType, IdGenerator idGenerator) {
-        idGeneratorMap.put(String.valueOf(idType.getKey()), idGenerator);
-        return this;
-    }
+    private IdGenerator idGenerator = new DefaultGenerator();
 
-    public Optional<IdGenerator> getIdGenerator(IdType idType) {
-        return Optional.ofNullable(Collections.unmodifiableMap(idGeneratorMap).get(String.valueOf(idType.getKey())));
+    public Optional<IdGenerator> getIdGenerator() {
+        return Optional.ofNullable(idGenerator);
     }
 
     /**

+ 5 - 5
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/incrementer/SnowflakeGenerator.java → mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/incrementer/DefaultGenerator.java

@@ -18,25 +18,25 @@ package com.baomidou.mybatisplus.core.incrementer;
 import com.baomidou.mybatisplus.core.toolkit.Sequence;
 
 /**
- * 雪花Id生成器
+ * 默认生成器
  *
  * @author sd-wangtaicheng@sdcncsi.com.cn nieqiuqiu
  * @date 2019-10-15
  * @since 3.3.0
  */
-public class SnowflakeGenerator implements IdGenerator {
+public class DefaultGenerator implements IdGenerator {
 
     private final Sequence sequence;
 
-    public SnowflakeGenerator() {
+    public DefaultGenerator() {
         this.sequence = new Sequence();
     }
 
-    public SnowflakeGenerator(long workerId, long dataCenterId) {
+    public DefaultGenerator(long workerId, long dataCenterId) {
         this.sequence = new Sequence(workerId, dataCenterId);
     }
 
-    public SnowflakeGenerator(Sequence sequence) {
+    public DefaultGenerator(Sequence sequence) {
         this.sequence = sequence;
     }
 

+ 12 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/incrementer/IdGenerator.java

@@ -16,6 +16,8 @@
 package com.baomidou.mybatisplus.core.incrementer;
 
 
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+
 import java.io.Serializable;
 
 /**
@@ -35,4 +37,14 @@ public interface IdGenerator {
      */
     Serializable generate(Object entity);
 
+    /**
+     * 生成uuid
+     *
+     * @param entity 实体
+     * @return uuid
+     */
+    default String generateUUID(Object entity) {
+        return IdWorker.get32UUID();
+    }
+
 }

+ 3 - 3
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/IdWorker.java

@@ -17,7 +17,7 @@ package com.baomidou.mybatisplus.core.toolkit;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
-import com.baomidou.mybatisplus.core.incrementer.SnowflakeGenerator;
+import com.baomidou.mybatisplus.core.incrementer.DefaultGenerator;
 import com.baomidou.mybatisplus.core.incrementer.IdGenerator;
 
 import java.time.LocalDateTime;
@@ -40,7 +40,7 @@ public class IdWorker {
      * @deprecated 3.3.0
      */
     @Deprecated
-    private static IdGenerator ID_GENERATOR = new SnowflakeGenerator();
+    private static IdGenerator ID_GENERATOR = new DefaultGenerator();
 
     /**
      * 毫秒格式化时间
@@ -97,7 +97,7 @@ public class IdWorker {
      */
     @Deprecated
     public static void initSequence(long workerId, long dataCenterId) {
-        ID_GENERATOR = new SnowflakeGenerator(workerId, dataCenterId);
+        ID_GENERATOR = new DefaultGenerator(workerId, dataCenterId);
     }
 
     /**

+ 2 - 2
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/MybatisDefaultParameterHandlerTest.java

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
-import com.baomidou.mybatisplus.core.incrementer.SnowflakeGenerator;
+import com.baomidou.mybatisplus.core.incrementer.DefaultGenerator;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
 import lombok.AllArgsConstructor;
@@ -51,7 +51,7 @@ class MybatisDefaultParameterHandlerTest {
         MappedStatement mappedStatement;
         Configuration configuration = new MybatisConfiguration();
         StaticSqlSource staticSqlSource = new StaticSqlSource(configuration, " ***********");
-        GlobalConfigUtils.getGlobalConfig(configuration).registerIdGenerator(IdType.ASSIGN_ID,new SnowflakeGenerator()).setMetaObjectHandler(new MetaObjectHandler() {
+        GlobalConfigUtils.getGlobalConfig(configuration).setIdGenerator(new DefaultGenerator()).setMetaObjectHandler(new MetaObjectHandler() {
 
             @Override
             public boolean compatibleFillId() {

+ 12 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/CustomIdGenerator.java

@@ -3,6 +3,7 @@ package com.baomidou.mybatisplus.test.h2.idgenerator;
 import com.baomidou.mybatisplus.core.incrementer.IdGenerator;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import org.apache.ibatis.reflection.SystemMetaObject;
 
 public class CustomIdGenerator implements IdGenerator {
@@ -31,4 +32,15 @@ public class CustomIdGenerator implements IdGenerator {
             return 1;
         }
     }
+
+    @Override
+    public String generateUUID(Object entity) {
+        String name = (String) SystemMetaObject.forObject(entity).getValue("name");
+        if ("旺仔".equals(name)) {
+            return "66666666666";
+        } else if ("靓仔".equals(name)) {
+            return "77777777777";
+        }
+        return IdWorker.get32UUID();
+    }
 }

+ 0 - 21
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/CustomUUIDGenerator.java

@@ -1,21 +0,0 @@
-package com.baomidou.mybatisplus.test.h2.idgenerator;
-
-import com.baomidou.mybatisplus.core.incrementer.IdGenerator;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import org.apache.ibatis.reflection.SystemMetaObject;
-
-import java.io.Serializable;
-
-public class CustomUUIDGenerator implements IdGenerator {
-
-    @Override
-    public Serializable generate(Object entity) {
-        String name = (String) SystemMetaObject.forObject(entity).getValue("name");
-        if ("旺仔".equals(name)) {
-            return "66666666666";
-        } else if ("靓仔".equals(name)) {
-            return "77777777777";
-        }
-        return IdWorker.get32UUID();
-    }
-}

+ 1 - 2
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/idgenerator/IdGeneratorConfig.java

@@ -1,6 +1,5 @@
 package com.baomidou.mybatisplus.test.h2.idgenerator;
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
@@ -38,7 +37,7 @@ public class IdGeneratorConfig {
     public GlobalConfig globalConfiguration() {
         GlobalConfig conf = new GlobalConfig();
         //自定义Id生成器
-        conf.registerIdGenerator(IdType.UUID, new CustomUUIDGenerator()).registerIdGenerator(IdType.ASSIGN_ID, new CustomIdGenerator());
+        conf.setIdGenerator(new CustomIdGenerator());
         return conf;
     }