ソースを参照

区分注解属性.

nieqiurong 3 ヶ月 前
コミット
1bb4daf849

+ 13 - 15
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/builder/Entity.java

@@ -32,7 +32,7 @@ import com.baomidou.mybatisplus.generator.config.StrategyConfig;
 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
 import com.baomidou.mybatisplus.generator.function.ConverterFileName;
-import com.baomidou.mybatisplus.generator.model.AnnotationAttributes;
+import com.baomidou.mybatisplus.generator.model.ClassAnnotationAttributes;
 import com.baomidou.mybatisplus.generator.util.ClassUtils;
 import lombok.Getter;
 import org.jetbrains.annotations.NotNull;
@@ -240,7 +240,7 @@ public class Entity implements ITemplate {
      * @since 3.5.10
      */
     @Getter
-    private final List<AnnotationAttributes> classAnnotations = new ArrayList<>();
+    private final List<ClassAnnotationAttributes> classAnnotations = new ArrayList<>();
 
     /**
      * <p>
@@ -371,12 +371,12 @@ public class Entity implements ITemplate {
         if (!kotlin) {
             // 原先kt模板没有处理这些,作为兼容项
             if (chain) {
-                this.classAnnotations.add(new AnnotationAttributes("@Accessors(chain = true)", "lombok.experimental.Accessors"));
+                this.classAnnotations.add(new ClassAnnotationAttributes("@Accessors(chain = true)", "lombok.experimental.Accessors"));
             }
             if (lombok && defaultLombok) {
                 // 原先lombok默认只有这两个
-                this.classAnnotations.add(new AnnotationAttributes("@Getter", "lombok.Getter"));
-                this.classAnnotations.add(new AnnotationAttributes("@Setter", "lombok.Setter"));
+                this.classAnnotations.add(new ClassAnnotationAttributes("@Getter", "lombok.Getter"));
+                this.classAnnotations.add(new ClassAnnotationAttributes("@Setter", "lombok.Setter"));
             }
         }
         if (tableInfo.isConvert()) {
@@ -388,23 +388,21 @@ public class Entity implements ITemplate {
             }
             //@TableName("${schemaName}${table.name}")
             String displayName = String.format("@TableName(\"%s%s\")", schemaName, tableInfo.getName());
-            this.classAnnotations.add(new AnnotationAttributes(TableName.class, displayName));
+            this.classAnnotations.add(new ClassAnnotationAttributes(TableName.class, displayName));
         }
         if (globalConfig.isSwagger()) {
             //@ApiModel(value = "${entity}对象", description = "${table.comment!}")
             String displayName = String.format("@ApiModel(value = \"%s对象\", description = \"%s\")", tableInfo.getEntityName(), comment);
-            this.classAnnotations.add(new AnnotationAttributes("@ApiModel",
+            this.classAnnotations.add(new ClassAnnotationAttributes(
                 displayName, "io.swagger.annotations.ApiModel", "io.swagger.annotations.ApiModelProperty"));
         }
         if (globalConfig.isSpringdoc()) {
             //@Schema(name = "${entity}", description = "${table.comment!}")
             String displayName = String.format("@Schema(name = \"%s\", description = \"%s\")", tableInfo.getEntityName(), comment);
-            this.classAnnotations.add(new AnnotationAttributes(displayName, "io.swagger.v3.oas.annotations.media.Schema"));
+            this.classAnnotations.add(new ClassAnnotationAttributes(displayName, "io.swagger.v3.oas.annotations.media.Schema"));
         }
         this.classAnnotations.forEach(attributes -> {
-            if (attributes.getDisplayNameFunction() != null) {
-                attributes.setDisplayName(attributes.getDisplayNameFunction().apply(tableInfo));
-            }
+            attributes.handleDisplayName(tableInfo);
             importPackages.addAll(attributes.getImportPackages());
         });
         data.put("entityClassAnnotations", this.classAnnotations.stream()
@@ -499,16 +497,16 @@ public class Entity implements ITemplate {
         }
 
         /**
-         * 开启lombok模型 (这里会把注解属性都加入进去,无论是否启用kotlin)
+         * 开启lombok模型 (这里会把注解属性都加入进去,无论是否启用{@link GlobalConfig#isKotlin()})
          *
          * @param attributes 注解属性集合
          * @return this
          * @since 3.5.10
          */
-        public Builder enableLombok(@NotNull AnnotationAttributes... attributes) {
+        public Builder enableLombok(@NotNull ClassAnnotationAttributes... attributes) {
             this.entity.lombok = true;
             this.entity.defaultLombok = false;
-            for (AnnotationAttributes attribute : attributes) {
+            for (ClassAnnotationAttributes attribute : attributes) {
                 this.addClassAnnotation(attribute);
             }
             return this;
@@ -767,7 +765,7 @@ public class Entity implements ITemplate {
          * @return this
          * @since 3.5.10
          */
-        public Builder addClassAnnotation(@NotNull AnnotationAttributes attributes) {
+        public Builder addClassAnnotation(@NotNull ClassAnnotationAttributes attributes) {
             this.entity.classAnnotations.add(attributes);
             return this;
         }

+ 5 - 32
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/model/AnnotationAttributes.java

@@ -15,7 +15,6 @@
  */
 package com.baomidou.mybatisplus.generator.model;
 
-import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -24,9 +23,10 @@ import org.jetbrains.annotations.NotNull;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.function.Function;
 
 /**
+ * 注解属性
+ *
  * @author nieqiurong
  * @since 3.5.10
  */
@@ -34,12 +34,6 @@ import java.util.function.Function;
 @ToString
 public class AnnotationAttributes {
 
-    /**
-     * 显示名称处理函数(最终需要转换成{@link #displayName})
-     */
-    @Setter
-    private Function<TableInfo, String> displayNameFunction;
-
     /**
      * 显示名称
      */
@@ -51,16 +45,13 @@ public class AnnotationAttributes {
      */
     private final Set<String> importPackages = new HashSet<>();
 
-    public AnnotationAttributes(@NotNull Class<?> annotationClass) {
-        this.displayName = "@" + annotationClass.getSimpleName();
-        this.importPackages.add(annotationClass.getName());
+    public AnnotationAttributes() {
     }
 
-    public AnnotationAttributes(@NotNull Class<?> annotationClass, @NotNull Function<TableInfo,String> displayNameFunction) {
-        this.displayNameFunction = displayNameFunction;
+    public AnnotationAttributes(@NotNull Class<?> annotationClass) {
+        this.displayName = "@" + annotationClass.getSimpleName();
         this.importPackages.add(annotationClass.getName());
     }
-
     public AnnotationAttributes(@NotNull Class<?> annotationClass, @NotNull String displayName, String... extraPkg) {
         this.displayName = displayName;
         this.importPackages.add(annotationClass.getName());
@@ -69,29 +60,11 @@ public class AnnotationAttributes {
         }
     }
 
-    public AnnotationAttributes(@NotNull Class<?> annotationClass, @NotNull Function<TableInfo,String> displayNameFunction, String... extraPkg) {
-        this.displayNameFunction = displayNameFunction;
-        this.importPackages.add(annotationClass.getName());
-        if (extraPkg != null && extraPkg.length > 0) {
-            this.importPackages.addAll(Arrays.asList(extraPkg));
-        }
-    }
-
     public AnnotationAttributes(@NotNull String displayName, @NotNull String... importPackages) {
         this.displayName = displayName;
         this.importPackages.addAll(Arrays.asList(importPackages));
     }
 
-    public AnnotationAttributes(@NotNull String importPackage, @NotNull Function<TableInfo, String> displayNameFunction) {
-        this.displayNameFunction = displayNameFunction;
-        this.importPackages.add(importPackage);
-    }
-
-    public AnnotationAttributes(@NotNull Set<String> importPackages, @NotNull Function<TableInfo, String> displayNameFunction) {
-        this.displayNameFunction = displayNameFunction;
-        this.importPackages.addAll(importPackages);
-    }
-
     /**
      * 添加导包
      *

+ 83 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/model/ClassAnnotationAttributes.java

@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2011-2024, baomidou (jobob@qq.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.baomidou.mybatisplus.generator.model;
+
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Arrays;
+import java.util.Set;
+import java.util.function.Function;
+
+/**
+ * 类注解属性
+ *
+ * @author nieqiurong
+ * @since 3.5.10
+ */
+@Setter
+@Getter
+@ToString
+@NoArgsConstructor
+public class ClassAnnotationAttributes extends AnnotationAttributes {
+
+    /**
+     * 根据{@link TableInfo}信息加工处理显示注解
+     * <p>显示名称处理函数(最终需要转换成{@link #setDisplayName(String)})<p/>
+     */
+    private Function<TableInfo, String> displayNameFunction;
+
+    public ClassAnnotationAttributes(@NotNull Class<?> annotationClass) {
+        super(annotationClass);
+    }
+
+    public ClassAnnotationAttributes(@NotNull Class<?> annotationClass, @NotNull Function<TableInfo, String> displayNameFunction, String... extraPkg) {
+        super(annotationClass);
+        this.displayNameFunction = displayNameFunction;
+        if (extraPkg != null && extraPkg.length > 0) {
+            super.getImportPackages().addAll(Arrays.asList(extraPkg));
+        }
+    }
+
+    public ClassAnnotationAttributes(@NotNull Class<?> annotationClass, @NotNull String displayName, String... extraPkg) {
+        super(annotationClass, displayName, extraPkg);
+    }
+
+    public ClassAnnotationAttributes(@NotNull String displayName, @NotNull String... importPackages) {
+        super(displayName, importPackages);
+    }
+
+    public ClassAnnotationAttributes(@NotNull String importPackage, @NotNull Function<TableInfo, String> displayNameFunction) {
+        super.getImportPackages().add(importPackage);
+        this.displayNameFunction = displayNameFunction;
+    }
+
+    public ClassAnnotationAttributes(@NotNull Set<String> importPackages, @NotNull Function<TableInfo, String> displayNameFunction) {
+        super.getImportPackages().addAll(importPackages);
+        this.displayNameFunction = displayNameFunction;
+    }
+
+    public void handleDisplayName(TableInfo tableInfo) {
+        if (displayNameFunction != null) {
+            super.setDisplayName(displayNameFunction.apply(tableInfo));
+        }
+    }
+
+}

+ 63 - 0
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/generator/model/ClassAnnotationAttributesTest.java

@@ -0,0 +1,63 @@
+package com.baomidou.mybatisplus.generator.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import java.util.Set;
+
+public class ClassAnnotationAttributesTest {
+
+    @Test
+    void test() {
+        var classAnnotationAttributes = new ClassAnnotationAttributes(TableName.class);
+        Assertions.assertNull(classAnnotationAttributes.getDisplayNameFunction());
+        Assertions.assertEquals("@TableName", classAnnotationAttributes.getDisplayName());
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains(TableName.class.getName()));
+
+        classAnnotationAttributes = new ClassAnnotationAttributes(TableName.class,(tableInfo -> "@Test"));
+        classAnnotationAttributes.handleDisplayName(Mockito.mock(TableInfo.class));
+        Assertions.assertNotNull(classAnnotationAttributes.getDisplayNameFunction());
+        Assertions.assertEquals("@Test", classAnnotationAttributes.getDisplayName());
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains(TableName.class.getName()));
+
+        classAnnotationAttributes = new ClassAnnotationAttributes(TableName.class,(tableInfo -> "@Test"), "com.baomidou.test");
+        classAnnotationAttributes.handleDisplayName(Mockito.mock(TableInfo.class));
+        Assertions.assertNotNull(classAnnotationAttributes.getDisplayNameFunction());
+        Assertions.assertEquals("@Test", classAnnotationAttributes.getDisplayName());
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains(TableName.class.getName()));
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains("com.baomidou.test"));
+
+        classAnnotationAttributes = new ClassAnnotationAttributes(TableName.class, "@Test");
+        Assertions.assertNull(classAnnotationAttributes.getDisplayNameFunction());
+        Assertions.assertEquals("@Test", classAnnotationAttributes.getDisplayName());
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains(TableName.class.getName()));
+
+        classAnnotationAttributes = new ClassAnnotationAttributes(TableName.class, "@Test", "com.baomidou.test");
+        Assertions.assertNull(classAnnotationAttributes.getDisplayNameFunction());
+        Assertions.assertEquals("@Test", classAnnotationAttributes.getDisplayName());
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains(TableName.class.getName()));
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains("com.baomidou.test"));
+
+        classAnnotationAttributes = new ClassAnnotationAttributes("@Test", "com.baomidou.test");
+        Assertions.assertNull(classAnnotationAttributes.getDisplayNameFunction());
+        Assertions.assertEquals("@Test", classAnnotationAttributes.getDisplayName());
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains("com.baomidou.test"));
+
+        classAnnotationAttributes = new ClassAnnotationAttributes("com.baomidou.test", (tableInfo -> "@Test"));
+        classAnnotationAttributes.handleDisplayName(Mockito.mock(TableInfo.class));
+        Assertions.assertNotNull(classAnnotationAttributes.getDisplayNameFunction());
+        Assertions.assertEquals("@Test", classAnnotationAttributes.getDisplayName());
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains("com.baomidou.test"));
+
+        classAnnotationAttributes = new ClassAnnotationAttributes(Set.of("com.baomidou.test1","com.baomidou.test2"), (tableInfo -> "@Test"));
+        classAnnotationAttributes.handleDisplayName(Mockito.mock(TableInfo.class));
+        Assertions.assertNotNull(classAnnotationAttributes.getDisplayNameFunction());
+        Assertions.assertEquals("@Test", classAnnotationAttributes.getDisplayName());
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains("com.baomidou.test1"));
+        Assertions.assertTrue(classAnnotationAttributes.getImportPackages().contains("com.baomidou.test2"));
+    }
+
+}