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删除我司敏感信息吗