1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package cn.flightfeather.supervision.domain.generatePlugin
 
import org.mybatis.generator.api.IntrospectedColumn
import org.mybatis.generator.api.IntrospectedTable
import org.mybatis.generator.api.Plugin
import org.mybatis.generator.api.PluginAdapter
import org.mybatis.generator.api.dom.java.Field
import org.mybatis.generator.api.dom.java.TopLevelClass
import tk.mybatis.mapper.generator.MapperPlugin
 
/**
 * MyBatis Generator自定义注解插件
 * 用于为生成的实体类添加自定义注解
 * @date 2025/10/13
 * @author feiyu02
 */
class CustomAnnotationPlugin : MapperPlugin() {
 
    override fun validate(warnings: MutableList<String>?): Boolean {
        return true
    }
 
    override fun modelBaseRecordClassGenerated(topLevelClass: TopLevelClass?, introspectedTable: IntrospectedTable?): Boolean {
        // 添加类级注解
        topLevelClass?.addImportedType("io.swagger.annotations.ApiModel");
        topLevelClass?.addAnnotation(
            String.format(
                "@ApiModel(value = \"%s\")", introspectedTable?.tableConfiguration
                    ?.domainObjectName
            )
        )
        return super.modelBaseRecordClassGenerated(topLevelClass, introspectedTable)
    }
 
    /**
     * 为字段添加注解
     */
    override fun modelFieldGenerated(
        field: Field?,
        topLevelClass: TopLevelClass?,
        introspectedColumn: IntrospectedColumn?,
        introspectedTable: IntrospectedTable?,
        modelClassType: Plugin.ModelClassType?,
    ): Boolean {
        // 为每个字段将其注释(若注释为null,使用字段名)添加为Swagger注解,用于API文档生成
        introspectedColumn ?: return true
        topLevelClass?.addImportedType("io.swagger.annotations.ApiModelProperty");
        if (introspectedColumn.remarks != null) {
            field?.addAnnotation(String.format("@ApiModelProperty(value = \"%s\")", introspectedColumn.remarks));
        } else {
            field?.addAnnotation(
                String.format(
                    "@ApiModelProperty(value = \"%s\")",
                    introspectedColumn.actualColumnName
                )
            );
        }
 
        return super.modelFieldGenerated(field, topLevelClass, introspectedColumn, introspectedTable, modelClassType)
    }
}