package org.example;
/**
* @ClassName GenerateCode
* @Description TODO
* @Author wdj
* @Date 2023/3/3 16:49
* @Version
*/
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
/**
* 低代码生成器
*/
public class GenerateCode {
/**
* 生成代码的输出模块
*/
private final static String MODULE = "generate";
/**
* 需要自动生成代码的表名,用【,】分隔
*/
private final static String TABLE_NAME = "dc_users_money_withdraw";
public static void main(String[] args) {
// 代码生成器
AutoGenerator ag = new AutoGenerator();
// 1、全局配置
GlobalConfig gc = new GlobalConfig();
// 项目根目录
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java") // 生成代码的输出目录:一般这个就是固定的,这里不用写到具体的哪个包,因为下面会单独配置包名
.setAuthor("wdj") // 生成代码的author
.setOpen(false) // 生成代码后,是否自动打开生成的目录:这里我们不需要,因为就是生成到当前项目
.setServiceImplName("%sServiceImpl") // 设置生成的services接口的名字的首字母是否为I,去掉I
.setServiceName("%sService")
.setMapperName("%sDao")
.setBaseResultMap(true) // 基本的字段映射
.setBaseColumnList(true) // 基本的sql片段
.setSwagger2(true);//实体属性 Swagger2 注解
// 设置全局配置
ag.setGlobalConfig(gc);
// 2、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/heixiniu?useUnicode=true&characterEncoding=utf8");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("wdj123456");
ag.setDataSource(dsc);
// 3、包的配置
PackageConfig pc = new PackageConfig();
// 设置包名:和上面的输出目录进行拼接(ourDir+parent)
pc.setParent("com.hxnwm.ny");
// 检测命令行输入的模块名:和上面的包名进行拼接(outDir+parent+moduleName),生成代码都会放到这个模块下
pc.setModuleName("diancan")
.setMapper("dao")
.setService("service")
.setController("controller")
.setEntity("entity");
//.setXml("mapper");
ag.setPackageInfo(pc);
// 4、策略配置
StrategyConfig sc = new StrategyConfig();
sc.setCapitalMode(true) //全局大写命名
.setNaming(NamingStrategy.underline_to_camel) // 自动生成的实体类的命名:数据库映射到实体类,下划线转驼峰
.setColumnNaming(NamingStrategy.underline_to_camel) // 这里如果不设置,会跟随上面实体类的命名设置
.setEntityTableFieldAnnotationEnable(true) // 字段注解:这里我们把表字段的注解打开,比如@TableField("car_name")
//.setSuperEntityClass("com.example.demo.base.BaseEntity") // 实体类的父类:如果有就配置,记得加包名
.setEntityLombokModel(true) // lombok:是否开启Lombok的注解,比如@Data,@EqualsAndHashCode(callSuper = true)\
.setSuperMapperClass("com.github.yulichang.base.MPJBaseMapper") // 映射类的父类:如果有就配置,记得加包名
.setSuperServiceClass("com.github.yulichang.base.MPJBaseService") // 服务接口的父类:如果有就配置,记得加包名
.setSuperServiceImplClass("com.github.yulichang.base.MPJBaseServiceImpl") // 服务实现类的父类:如果有就配置,记得加包名
// setSuperControllerClass("com.example.demo.base.BaseController") // 控制器类的父类:如果有就配置,记得加包名
.setRestControllerStyle(true) // 控制器的@RestController注解:是否开启,不开启则默认为@Controller
.setInclude(TABLE_NAME.split(",")) // 监测命令行的输入:表名
.setControllerMappingHyphenStyle(true); // 控制器的请求映射url风格:驼峰转连字符,比如"carList"-> "car-list"
// 设置表的前缀:设置后,生成的类名和Controller的请求映射中就不会包含表前缀
// 设置后为 @RequestMapping("/gps/car"),而不是@RequestMapping("/gps/gps-car")
// 类名同理
sc.setTablePrefix("dc_");//设置过滤表前缀
ag.setStrategy(sc);
ag.execute();
}
}