AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
简单来说将你重复的工作封装起来,用的直接直接调用即可生成。
1.添加依赖
MyBatis-Plus 从 3.0.3
之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:
- 添加 代码生成器 依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
- 添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。
Velocity(默认):
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
Freemarker:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
2.开始
2.1全局配置
//1.全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setActiveRecord(true)//是否支持AR模式
.setAuthor("yangjun")//作者
.setOutputDir(System.getProperty("user.dir") + "/src/main/java")//生成路径
.setFileOverride(true)//文件覆盖
.setIdType(IdType.ASSIGN_ID)//主键策略
.setServiceName("%sService")//设置生成的servic接口的名字首字母是否为I 例如:IUserService
.setBaseResultMap(true)//生成mapper文件的SQL映射
.setEnableCache(false)// XML 二级缓存
.setBaseColumnList(true)//生成列集合
.setSwagger2(true);//需要引入swagger依赖
2.2数据源配置
//2.数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)//数据库选择
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUrl("jdbc:mysql://localhost:3306/cmsserverTimezone=GMT%2B8&&useSSL=false")
.setUsername("账户")
.setPassword("密码");
2.3策略配置
//3.策略配置
StrategyConfig strategyConfig = new StrategyConfig();
//自动填充策略
TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(createTime);
tableFills.add(updateTime);
strategyConfig.setCapitalMode(true)//全局大写命名
.setNaming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略
.setColumnNaming(NamingStrategy.underline_to_camel)
.setEntityLombokModel(true)//引入lombok依赖省去getset方法
.setTableFillList(tableFills)//自动填充策略
.setVersionFieldName("version")//自动生成逻辑删除,数据库中必须有deleted字段
.setInclude("table/需要生成的表
2.4包名策略配置
//4、包名策略配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.cms")//父目录
.setMapper("mapper")//mapper文件夹
.setService("service")//service目录
.setController("controller")//controlle目录
.setEntity("entity")//实体类目录
.setXml("mapper/log");//mapper.xml目录
//上面的都可以根据实际情况改动
2.4加载配置
//5、整合配置
AutoGenerator autoGenerator = new AutoGenerator();
autoGenerator.setGlobalConfig(globalConfig)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setPackageInfo(packageConfig);
//执行
autoGenerator.execute();
完整代码:
/**
* @Author: yangjun
* @Date: 2020/6/8 20:16
* @Version 1.0
*/
public class MPGenerator {
/**
* @param table 表名
*/
public static void AutoGenerator(String table){
//1.全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setActiveRecord(true)//是否支持AR模式
.setAuthor("yangjun")//作者
.setOutputDir(System.getProperty("user.dir") + "/src/main/java")//生成路径
.setFileOverride(true)//文件覆盖
.setIdType(IdType.ASSIGN_ID)//主键策略
.setServiceName("%sService")//设置生成的servic接口的名字首字母是否为I 例如:IUserService
.setBaseResultMap(true)//生成mapper文件的SQL映射
.setEnableCache(false)// XML 二级缓存
.setBaseColumnList(true)//生成列集合
.setSwagger2(true);
//2.数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUrl("jdbc:mysql://localhost:3306/cms?serverTimezone=GMT%2B8&&useSSL=false")
.setUsername("root")
.setPassword("root");
//3.策略配置
StrategyConfig strategyConfig = new StrategyConfig();
//自动填充策略
TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(createTime);
tableFills.add(updateTime);
strategyConfig.setCapitalMode(true)//全局大写命名
// .isCapitalModeNaming( NamingStrategy.underline_to_camel())
//指定表明 字段名是否为下划线
.setNaming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略
.setColumnNaming(NamingStrategy.underline_to_camel)
.setEntityLombokModel(true)
.setTableFillList(tableFills)//自动填充策略
.setVersionFieldName("version")
.setInclude("log");//s生成的表
//4、包名策略配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.cms")
.setMapper("mapper")
.setService("service")
.setController("controller")
.setEntity("entity")
.setXml("mapper/log");
//5、整合配置
AutoGenerator autoGenerator = new AutoGenerator();
autoGenerator.setGlobalConfig(globalConfig)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setPackageInfo(packageConfig);
//执行
autoGenerator.execute();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入要生成的表名");
AutoGenerator(scanner.next());
}
}