Pārlūkot izejas kodu

调整主键生成器.

nieqiuqiu 5 gadi atpakaļ
vecāks
revīzija
fd2f6ec557

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

@@ -16,6 +16,7 @@
 package com.baomidou.mybatisplus.core;
 
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.core.incrementer.DefaultIdGenerator;
 import com.baomidou.mybatisplus.core.injector.SqlRunnerInjector;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import org.apache.ibatis.exceptions.ExceptionFactory;
@@ -79,9 +80,12 @@ public class MybatisSqlSessionFactoryBuilder extends SqlSessionFactoryBuilder {
     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.getIdGenerator() != null) {
+            IdWorker.setIdGenerator(globalConfig.getIdGenerator());
+        } else {
+            if (null != globalConfig.getWorkerId() && null != globalConfig.getDatacenterId()) {
+                IdWorker.setIdGenerator(new DefaultIdGenerator(globalConfig.getWorkerId(), globalConfig.getDatacenterId()));
+            }
         }
         if (globalConfig.isEnableSqlRunner()) {
             new SqlRunnerInjector().inject(configuration);

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

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.annotation.FieldStrategy;
 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.ISqlInjector;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
 import lombok.AccessLevel;
@@ -83,7 +84,10 @@ public class GlobalConfig implements Serializable {
      * 元对象字段填充控制器
      */
     private MetaObjectHandler metaObjectHandler;
-
+    /**
+     * 主键生成器
+     */
+    private IdGenerator idGenerator;
     /**
      * 标记全局设置 (统一所有入口)
      */

+ 5 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/incrementer/DefaultIdGenerator.java

@@ -24,18 +24,19 @@ import com.baomidou.mybatisplus.core.toolkit.Sequence;
  * @date 2019/10/15
  */
 public class DefaultIdGenerator implements IdGenerator {
-    private static Sequence WORKER;
+
+    private Sequence sequence;
 
     public DefaultIdGenerator() {
-        WORKER = new Sequence();
+        sequence = new Sequence();
     }
 
     public DefaultIdGenerator(long workerId, long dataCenterId) {
-        WORKER = new Sequence(workerId, dataCenterId);
+        sequence = new Sequence(workerId, dataCenterId);
     }
 
     @Override
     public long nextId() {
-        return WORKER.nextId();
+        return sequence.nextId();
     }
 }

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

@@ -70,7 +70,10 @@ public class IdWorker {
      *
      * @param workerId     工作机器 ID
      * @param dataCenterId 序列号
+     * @see #setIdGenerator(IdGenerator)
+     * @deprecated 3.2.1
      */
+    @Deprecated
     public static void initSequence(long workerId, long dataCenterId) {
         ID_GENERATOR = new DefaultIdGenerator(workerId, dataCenterId);
     }