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

情况是这样的:

原本mybatis-plus的框架的模板是不支持swagger的注解的,需要手动写。

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

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

工程目录:

ceaa3ad9afc098393f635119ed3d4482.png

GeneratorCodepackage 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.vmpackage ${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.vmpackage ${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})#end {

#elseif(${activeRecord})

public class ${entity} extends Model {

#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

相关文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值