Home>Article>Java> Generate files that are not overwritten based on mybatis-plus and support swagger annotations

Generate files that are not overwritten based on mybatis-plus and support swagger annotations

php是最好的语言
php是最好的语言 Original
2018-08-03 14:48:38 6533browse

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

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

Generate files that are not overwritten based on mybatis-plus and support swagger annotations

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 的配置

 com.baomidou mybatisplus-spring-boot-starter 1.0.5   com.baomidou mybatis-plus 2.3   org.apache.velocity velocity-engine-core 2.0   io.springfox springfox-swagger2 2.8.0   io.springfox springfox-swagger-ui 2.8.0 
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覆盖内容却没覆盖的问题?

The above is the detailed content of Generate files that are not overwritten based on mybatis-plus and support swagger annotations. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn