zoukankan      html  css  js  c++  java
  • mybatis-generator lombok插件

    插件地址:(https://github.com/suyin58/mybatis-generator-tddl/blob/master/generator-plugin/src/main/java/com/toolplat/generator/plugins/LombokPlugin.java)

    使用Mybatis的插件拓展(继承PluginAdapter),增加注解处理并去掉默认的getter和setter方法

    public class LombokPlugin extends BasePlugin {
        @Override
        public boolean validate(List<String> warnings) {
            return true;
        }
    
    
        private final Collection<Annotations> annotations;
        /**
         * LombokPlugin constructor
         */
        public LombokPlugin() {
    
            annotations = new LinkedHashSet<Annotations>(Annotations.values().length);
        }
    
    
        /**
         * Intercepts base record class generation
         *
         * @param topLevelClass
         *            the generated base record class
         * @param introspectedTable
         *            The class containing information about the table as
         *            introspected from the database
         * @return always true
         */
        @Override
        public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
                                                     IntrospectedTable introspectedTable) {
            addDataAnnotation(topLevelClass);
            return true;
        }
    
        /**
         * Intercepts primary key class generation
         *
         * @param topLevelClass
         *            the generated primary key class
         * @param introspectedTable
         *            The class containing information about the table as
         *            introspected from the database
         * @return always true
         */
        @Override
        public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass,
                                                     IntrospectedTable introspectedTable) {
            addDataAnnotation(topLevelClass);
            return true;
        }
    
        /**
         * Intercepts "record with blob" class generation
         *
         * @param topLevelClass
         *            the generated record with BLOBs class
         * @param introspectedTable
         *            The class containing information about the table as
         *            introspected from the database
         * @return always true
         */
        @Override
        public boolean modelRecordWithBLOBsClassGenerated(
                TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
            addDataAnnotation(topLevelClass);
            return true;
        }
    
        /**
         * Prevents all getters from being generated.
         * See SimpleModelGenerator
         *
         * @param method
         *            the getter, or accessor, method generated for the specified
         *            column
         * @param topLevelClass
         *            the partially implemented model class
         * @param introspectedColumn
         *            The class containing information about the column related
         *            to this field as introspected from the database
         * @param introspectedTable
         *            The class containing information about the table as
         *            introspected from the database
         * @param modelClassType
         *            the type of class that the field is generated for
         */
        @Override
        public boolean modelGetterMethodGenerated(Method method,
                                                  TopLevelClass topLevelClass,
                                                  IntrospectedColumn introspectedColumn,
                                                  IntrospectedTable introspectedTable,
                                                  ModelClassType modelClassType) {
            return false;
        }
    
        /**
         * Prevents all setters from being generated
         * See SimpleModelGenerator
         *
         * @param method
         *            the setter, or mutator, method generated for the specified
         *            column
         * @param topLevelClass
         *            the partially implemented model class
         * @param introspectedColumn
         *            The class containing information about the column related
         *            to this field as introspected from the database
         * @param introspectedTable
         *            The class containing information about the table as
         *            introspected from the database
         * @param modelClassType
         *            the type of class that the field is generated for
         * @return always false
         */
        @Override
        public boolean modelSetterMethodGenerated(Method method,
                                                  TopLevelClass topLevelClass,
                                                  IntrospectedColumn introspectedColumn,
                                                  IntrospectedTable introspectedTable,
                                                  ModelClassType modelClassType) {
            return false;
        }
    
        /**
         * Adds the lombok annotations' imports and annotations to the class
         *
         * @param topLevelClass
         *            the partially implemented model class
         */
        private void addDataAnnotation(TopLevelClass topLevelClass) {
            for (Annotations annotation : annotations) {
                topLevelClass.addImportedType(annotation.javaType);
                topLevelClass.addAnnotation(annotation.name);
            }
        }
    
        @Override
        public void setProperties(Properties properties) {
            super.setProperties(properties);
    
            //@Data is default annotation
            annotations.add(Annotations.DATA);
    
            for (Map.Entry<Object, Object> entry : properties.entrySet()) {
                boolean isEnable = Boolean.parseBoolean(entry.getValue().toString());
    
                if (isEnable) {
                    String paramName = entry.getKey().toString().trim();
                    Annotations annotation = Annotations.getValueOf(paramName);
                    if (annotation != null) {
                        annotations.add(annotation);
                        annotations.addAll(Annotations.getDependencies(annotation));
                    }
                }
            }
        }
    
    
        private enum Annotations {
            DATA("data", "@Data", "lombok.Data"),
            BUILDER("builder", "@Builder", "lombok.Builder"),
            SUPER_BUILDER("superBuilder", "@SuperBuilder", "lombok.experimental.SuperBuilder"),
            ALL_ARGS_CONSTRUCTOR("allArgsConstructor", "@AllArgsConstructor", "lombok.AllArgsConstructor"),
            NO_ARGS_CONSTRUCTOR("noArgsConstructor", "@NoArgsConstructor", "lombok.NoArgsConstructor"),
            TO_STRING("toString", "@ToString", "lombok.ToString");
    
    
            private final String paramName;
            private final String name;
            private final FullyQualifiedJavaType javaType;
    
    
            Annotations(String paramName, String name, String className) {
                this.paramName = paramName;
                this.name = name;
                this.javaType = new FullyQualifiedJavaType(className);
            }
    
            private static Annotations getValueOf(String paramName) {
                for (Annotations annotation : Annotations.values()) {
                    if (String.CASE_INSENSITIVE_ORDER.compare(paramName, annotation.paramName) == 0) {
                        return annotation;
                    }
                }
    
                return null;
            }
    
            private static Collection<Annotations> getDependencies(Annotations annotation) {
                if (annotation == ALL_ARGS_CONSTRUCTOR) {
                    return Collections.singleton(NO_ARGS_CONSTRUCTOR);
                } else {
                    return Collections.emptyList();
                }
            }
        }
    }
    View Code

    配置文件中使用插件的时候,指定需要的Lombok注解(https://github.com/suyin58/mybatis-generator-tddl/blob/master/generator-test/src/test/resources/generatorConfigMyBatis3.xml)

    <!-- lombok 插件 -->
            <plugin type="com.toolplat.generator.plugins.LombokPlugin">
                <property name="data" value="true"/>
                <property name="builder" value="true"/>
                <property name="allArgsConstructor" value="true"/>
                <property name="noArgsConstructor" value="true"/>
                <property name="toString" value="true"/>
            </plugin>
    View Code

    生成的文件样例(https://github.com/suyin58/mybatis-generator-tddl/blob/master/generator-test/src/main/java/com/toolplat/demo/domain/TableOneUniqueKeyPO.java):

    /**
     * 多个uk测试
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public class TableTwoUniqueKeyPO implements Serializable {
        private static final long serialVersionUID = 8946653058164L;
    
        /**
         * 多群主键
         */
        private Long orgId;
    
        /**
         * 多码
         */
        private String code;
    
        /**
         * id
         */
        private Long id;
    
        /**
         * 创建时间
         */
        private Date gmtCreate;
    
        /**
         * 修改时间
         */
        private Date gmtModified;
    
        /**
         * 会话ID
         */
        private String cid;
    }
    View Code
  • 相关阅读:
    getRandomInt getRandomString
    git 换行符替换
    Versions maven plugin 修改版本
    spotless-maven-plugin java代码自动格式化mvn spotless:apply -fn
    eclipse.ini
    JVM架构和GC垃圾回收机制
    查看搜狗浏览器记住的密码
    TestGc finalize()
    Storm个人学习总结
    mongo嵌套查询
  • 原文地址:https://www.cnblogs.com/loveyou/p/13883205.html
Copyright © 2011-2022 走看看