Просмотр исходного кода

增加兼容填充主键开关.

聂秋秋 5 лет назад
Родитель
Сommit
12f514513b

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

@@ -181,11 +181,13 @@ public class MybatisDefaultParameterHandler extends DefaultParameterHandler {
                     metaObjectHandler.insertFill(metaObject);
                 } else {
                     // 兼容旧操作 id类型为input或none的要用填充器处理一下
-                    String keyProperty = tableInfo.getKeyProperty();
-                    if (StringUtils.isNotBlank(keyProperty)) {
-                        Object value = metaObject.getValue(keyProperty);
-                        if (value == null && (IdType.NONE == tableInfo.getIdType() || IdType.INPUT == tableInfo.getIdType())) {
-                            metaObjectHandler.insertFill(metaObject);
+                    if(metaObjectHandler.compatibleFillId()){
+                        String keyProperty = tableInfo.getKeyProperty();
+                        if (StringUtils.isNotBlank(keyProperty)) {
+                            Object value = metaObject.getValue(keyProperty);
+                            if (value == null && (IdType.NONE == tableInfo.getIdType() || IdType.INPUT == tableInfo.getIdType())) {
+                                metaObjectHandler.insertFill(metaObject);
+                            }
                         }
                     }
                 }

+ 13 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/MetaObjectHandler.java

@@ -44,6 +44,19 @@ public interface MetaObjectHandler {
         return true;
     }
 
+    /**
+     * 兼容填充主键判断开关
+     * 如果启用开关:当主键值为空且主键生成策略为NONE或INPUT会进入新增填充
+     * 这开关主要是用来兼容旧版本的用户使用插入填充来进行主键填充的开关
+     * 暂时不确定什么时候会移出此开关,请尽快使用新的Id生成策略来生成Id
+     *
+     * @return 是否启用
+     * @since 3.2.1
+     */
+    default boolean compatibleFillId() {
+        return false;
+    }
+
     /**
      * 是否开启了更新填充
      */

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

@@ -52,6 +52,12 @@ class MybatisDefaultParameterHandlerTest {
         Configuration configuration = new MybatisConfiguration();
         StaticSqlSource staticSqlSource = new StaticSqlSource(configuration, " ***********");
         GlobalConfigUtils.getGlobalConfig(configuration).setIdGenerator(new DefaultGenerator()).setMetaObjectHandler(new MetaObjectHandler() {
+
+            @Override
+            public boolean compatibleFillId() {
+                return true;
+            }
+
             @Override
             public void insertFill(MetaObject metaObject) {
                 //TODO 这种骚操作要干掉!!!!!!!!!!!!