• 技术文章 >Java >java教程

    基于mybatis-plus生成不被覆盖的文件并支持swagger注解

    php是最好的语言php是最好的语言2018-08-03 14:48:38原创4891
    情况是这样的:
    原本mybatis-plus的框架的模板是不支持swagger的注解的,需要手动写。
    自己折腾了1个多小时,建立在mybatis-plus的基础上进行修改。可以选择生成文件时,不覆盖某个目录下的文件,并支持生成swagger注解。这里把代码贴出来,主要是为了方便以后的兄弟们!!!

    需要声明的是,本人的是maven工程,springBoot项目!
    工程目录:

    1.png

    GeneratorCode

    package com.asita.renovation;
    
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.config.*;
    import com.baomidou.mybatisplus.generator.config.rules.DbType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    
    import java.io.File;
    import java.nio.file.Paths;
    
    public class GeneratorCode {
    
        private static String packageName = "com.asita.renovation";
        private static String outDir = "F:\\java_web\\renovation\\src\\main\\java";
        private static String entity = "entity";
        private static String mapper = "mapper";
        private static String service = "service";
        private static String impl = "service.impl";
        private static String controller = "controller";
        private static String xml = "mapper.xml";
        private static boolean isOverEntity = true;
        private static boolean isOverController = false;
        private static boolean isOverService = false;
        private static boolean isOverServiceImpl = false;
        private static boolean isOverMapper = false;
        private static boolean isOverXml = false;
    
        private static String entityVM = "/templates/entity.vm";
        private static String controllerVM = "/templates/controller.vm";
        private static String serviceVM = "";
        private static String serviceImplVM = "";
        private static String mapperVM = "";
        private static String xmlVM = "";
    
        private static String [] baseDir = {entity, mapper, service, impl, controller};
        public static void main(String[] args) {
            //user -> UserService, 设置成true: user -> IUserService
            boolean serviceNameStartWithI = true;
            generateByTables(serviceNameStartWithI, packageName,
                    "bedroom_ratio", "boq", "common_project",
                    "construction_detail", "construction_detail_item","construction_unit",
                    "loan_template", "main_material_list", "manager", "material_list",
                    "material_suppiler_template", "membership_fee",
                    "room_area_formula", "room_area_formula_template", "toll_switch",
                    "user", "work_template");
        }
    
        private static void generateByTables(boolean serviceNameStartWithI, String packageName, String... tableNames) {
            GlobalConfig config = new GlobalConfig();
            String dbUrl = "jdbc:mysql://localhost:3306/renovation?serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=true";
            DataSourceConfig dataSourceConfig = new DataSourceConfig();
            dataSourceConfig.setDbType(DbType.MYSQL)
                    .setUrl(dbUrl)
                    .setUsername("root")
                    .setPassword("#")
                    .setDriverName("com.mysql.cj.jdbc.Driver");
            StrategyConfig strategyConfig = new StrategyConfig();
            strategyConfig
                    .setCapitalMode(false)
                    .setEntityLombokModel(true)
                    .setDbColumnUnderline(true)
                    .setRestControllerStyle(true)
                    .entityTableFieldAnnotationEnable(false)
                    .setNaming(NamingStrategy.underline_to_camel)
                    //修改替换成你需要的表名,多个表名传数组
                    .setInclude(tableNames);
            config.setActiveRecord(true)
                    .setAuthor("陈少平")
                    .setOutputDir(outDir)
                    .setBaseResultMap(true)
                    .setBaseColumnList(true)
                    .setFileOverride(true)
                    .setEnableCache(false)
                    // XML ResultMap
                    .setBaseResultMap(true)
                    // XML columList;
                    .setBaseColumnList(true);
            if (!serviceNameStartWithI) {
                config.setServiceName("%sService");
            }
    
            PackageConfig pcf = initPackage();
    
            TemplateConfig tc = initTemplateConfig(packageName);
    
            new AutoGenerator().setGlobalConfig(config)
                    .setDataSource(dataSourceConfig)
                    .setStrategy(strategyConfig)
                    .setPackageInfo(pcf)
                    .setTemplate(tc)
                    .execute();
        }
    
        /**
         * 根据自己的需要,修改哪些包下面的 要覆盖还是不覆盖
         * @param packageName
         */
        private static TemplateConfig initTemplateConfig(String packageName) {
            TemplateConfig tc = new TemplateConfig();
            for(String tmp : baseDir) {
                initVM(tc);
                File file = new File(Paths.get(outDir, String.join("/", packageName.split("\\.")), tmp).toString());
                String[] list = file.list();
                if(list != null && list.length > 0) {
                    if(!isOverController) {
                        tc.setController(null);
                    }
                    if(!isOverService) {
                        tc.setService(null);
                    }
                    if(!isOverServiceImpl) {
                        tc.setServiceImpl(null);
                    }
                    if(!isOverEntity) {
                        tc.setEntity(null);
                    }
                    if(!isOverMapper) {
                        tc.setEntity(null);
                    }
                    if(!isOverXml) {
                        tc.setXml(null);
                    }
                }
            }
            return tc;
        }
    
        private static void initVM(TemplateConfig tc) {
            if(stringIsNotNull(entityVM)) {
                tc.setEntity(entityVM);
            }
            if(stringIsNotNull(mapperVM)) {
                tc.setMapper(mapperVM);
            }
            if(stringIsNotNull(serviceImplVM)) {
                tc.setServiceImpl(serviceImplVM);
            }
            if(stringIsNotNull(serviceVM)) {
                tc.setService(serviceVM);
            }
            if(stringIsNotNull(xmlVM)) {
                tc.setXml(xmlVM);
            }
            if(stringIsNotNull(controllerVM)) {
                tc.setController(controllerVM);
            }
        }
    
        /**
         * 简单判断字符串是不是为空
         * @param s
         * @return
         */
        private static boolean stringIsNotNull(String s) {
            if(null != s && !s.equals("") && s.length() > 0 && s.trim().length() > 0) {
                return true;
            }
            return false;
       **加粗文字** }
    
        /**
         * 初始化包目录配置
         * @return
         */
        private static PackageConfig initPackage() {
            PackageConfig packageConfig = new PackageConfig();
            packageConfig.setParent(packageName);
            packageConfig.setService(service);
            packageConfig.setServiceImpl(impl);
            packageConfig.setController(controller);
            packageConfig.setEntity(entity);
            packageConfig.setXml(xml);
            return packageConfig;
        }
    }

    /templates/controller.vm

    package ${package.Controller};
    
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import io.swagger.annotations.Api;
    #if(${restControllerStyle})
    import org.springframework.web.bind.annotation.RestController;
    #else
    import org.springframework.stereotype.Controller;
    #end
    #if(${superControllerClassPackage})
    import ${superControllerClassPackage};
    #end
    
    /**
    * @author ${author}
    * @since ${date}
    */
    @Api(tags = {"$!{table.comment}"})
    #if(${restControllerStyle})
    @RestController
    #else
    @Controller
    #end
    @RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end")
    #if(${kotlin})
    class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end
    
    #else
    #if(${superControllerClass})
    public class ${table.controllerName} extends ${superControllerClass} {
    #else
    public class ${table.controllerName} {
    #end
    
    }
    
    #end

    /templates/entity.vm

    package ${package.Entity};
    
    #foreach($pkg in ${table.importPackages})
    import ${pkg};
    #end
    #if(${entityLombokModel})
    
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    import lombok.EqualsAndHashCode;
    import lombok.experimental.Accessors;
    #end
    
    /**
    * @author ${author}
    * @since ${date}
    */
    @ApiModel(value ="$!{table.comment}")
    #if(${entityLombokModel})
    @Data
    #if(${superEntityClass})
    @EqualsAndHashCode(callSuper = true)
    #else
    @EqualsAndHashCode(callSuper = false)
    #end
    @Accessors(chain = true)
    #end
    #if(${table.convert})
    @TableName("${table.name}")
    #end
    #if(${superEntityClass})
    public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end {
    #elseif(${activeRecord})
    public class ${entity} extends Model<${entity}> {
    #else
    public class ${entity} implements Serializable {
    #end
    
    private static final long serialVersionUID = 1L;
    
    ## ----------  BEGIN 字段循环遍历  ----------
    #foreach($field in ${table.fields})
    #if(${field.keyFlag})
    #set($keyPropertyName=${field.propertyName})
    #end
        #if("$!field.comment" != "")
        @ApiModelProperty(value = "${field.comment}")
        #end
    #if(${field.keyFlag})
    ## 主键
    #if(${field.keyIdentityFlag})
        @TableId(value = "${field.name}", type = IdType.AUTO)
    #elseif(!$null.isNull(${idType}) && "$!idType" != "")
        @TableId(value = "${field.name}", type = IdType.${idType})
    #elseif(${field.convert})
        @TableId("${field.name}")
    #end
        ## 普通字段
    #elseif(${field.fill})
    ## -----   存在字段填充设置   -----
    #if(${field.convert})
        @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
    #else
        @TableField(fill = FieldFill.${field.fill})
    #end
    #elseif(${field.convert})
        @TableField("${field.name}")
    #end
    ## 乐观锁注解
    #if(${versionFieldName}==${field.name})
        @Version
    #end
    ## 逻辑删除注解
    #if(${logicDeleteFieldName}==${field.name})
        @TableLogic
    #end
        private ${field.propertyType} ${field.propertyName};
    #end
    ## ----------  END 字段循环遍历  ----------
    
    #if(!${entityLombokModel})
        #foreach($field in ${table.fields})
            #if(${field.propertyType.equals("boolean")})
                #set($getprefix="is")
            #else
                #set($getprefix="get")
            #end
    
        public ${field.propertyType} ${getprefix}${field.capitalName}() {
        return ${field.propertyName};
        }
    
            #if(${entityBuilderModel})
            public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
            #else
            public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
            #end
        this.${field.propertyName} = ${field.propertyName};
            #if(${entityBuilderModel})
            return this;
            #end
        }
        #end
    #end
    
    #if(${entityColumnConstant})
        #foreach($field in ${table.fields})
        public static final String ${field.name.toUpperCase()} = "${field.name}";
    
        #end
    #end
        #if(${activeRecord})
        @Override
        protected Serializable pkVal() {
            #if(${keyPropertyName})
            return this.${keyPropertyName};
            #else
            return null;
            #end
        }
        #end
        #if(!${entityLombokModel})
        @Override
        public String toString() {
        return "${entity}{" +
            #foreach($field in ${table.fields})
                #if($!{velocityCount}==1)
                "${field.propertyName}=" + ${field.propertyName} +
                #else
                ", ${field.propertyName}=" + ${field.propertyName} +
                #end
            #end
        "}";
        }
        #end
    }

    附上maven的配置,以及springBoot 的配置

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatisplus-spring-boot-starter</artifactId>
        <version>1.0.5</version>
    </dependency>
    
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.3</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>
    
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.8.0</version>
    </dependency>
    mybatis-plus:
      mapper-locations: classpath:/com/asita/renovation/mapper/xml/*Mapper.xml
      typeAliasesPackage: com.asita.renovation.entity
      global-config:
        #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
        id-type: 0
        #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
        field-strategy: 2
        #刷新mapper 调试神器
        refresh-mapper: true
        #驼峰下划线转换
    #    db-column-underline: true
        # Sequence序列接口实现类配置
        key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
      configuration:
        map-underscore-to-camel-case: true
        cache-enabled: false

    相关文章:

    如果解决smarty模板重名(路径不同),导致的编译后的文件被覆盖的问题。

    怎么解决div覆盖内容却没覆盖的问题?

    以上就是基于mybatis-plus生成不被覆盖的文件并支持swagger注解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:java springboot ibatis
    上一篇:zuul实现Cors跨域的两种方式:corsFilter、继承ZuulFilter 下一篇:Java编程思想:用引用操作对象、内存在程序运行时的分配方式
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 一招教你使用java快速创建Map(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一文讲解Java中初始化List集合的8种方式(附代码)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网