Comment From: a893359278
就是只覆盖entity 实体类, 数据库刚开始的时候,会有经常性的变动~~
Comment From: qmdx
不支持,不过你可以改下设置覆盖开启,如果存在关闭不想覆盖模块的生成
Comment From: a893359278
我这边修改了模板引擎。把代码贴出来下,支持swagger的注解,可以选择是否覆盖某个文件
Comment From: a893359278
`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;
}
} `
Comment From: a893359278
本人的工程是maven工程,该文件在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
}`
Comment From: a893359278
controller.vm (在/templates/ 目录下) `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`
Comment From: a893359278
最后,感谢作者,这个框架确实好用,之前我也自己写过类似的,但是没有作者的强大,而且写得乱七八糟的。厉害!!!
Comment From: RoJinnSennSei
最后,感谢作者,这个框架确实好用,之前我也自己写过类似的,但是没有作者的强大,而且写得乱七八糟的。厉害!!!
谢谢。 亲测有效 可以不覆盖service controller..... 了
Comment From: safadfxx
@RoJinnSennSei 您好,能在github删除我司敏感信息吗