AutoGenerator代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
1.准备数据
CREATE TABLE `user` (
`id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'id\r\n身份标识号',
`real_name` varchar(50) DEFAULT NULL COMMENT '真实姓名',
`gender` varchar(6) DEFAULT NULL COMMENT '性别',
`age` varchar(3) DEFAULT NULL COMMENT '年龄',
`email` varchar(25) DEFAULT NULL COMMENT '邮箱',
`address` varchar(255) DEFAULT NULL COMMENT '住址',
`nick_name` varchar(50) DEFAULT NULL COMMENT '昵称',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`account` varchar(50) DEFAULT NULL COMMENT '账号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
2.依赖
MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖
<!-- mybatisplus自动生成orm代码三件套 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<!--Freemarker模板引擎-->
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<!--MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl三种模板,但springboot1.4版本以上不再支持velocity-->
<!-- <dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>-->
<!-- <dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl-framework-starter</artifactId>
<version>1.2.10.RELEASE</version>
</dependency>-->
3.配置和执行AutoGenerator 代码生成器
@Slf4j
public class MysqlGenerator {
public static void main(String[] args) {
//全局策略配置
GlobalConfig config = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
config.setActiveRecord(true)
//作者注释
.setAuthor("LeeJack")
//输出路径
.setOutputDir(projectPath + "/mybatis-plus-autogenerator/src/main/java")
//覆盖已有文件,默认false
.setFileOverride(true)
//是否打开输出目录窗口。默认true
.setOpen(false)
//是否在xml中添加二级缓存配置。默认false
//.setEnableCache(true)
//开启kotlin模式,默认false
//.setKotlin(false)
//开启swagger2模式
.setSwagger2(true)
//开启ActiveRecord模式
.setActiveRecord(true)
//mapper添加restMap
.setBaseResultMap(true)
//mapper添加Base_Column_List
.setBaseColumnList(true)
//时间类型对应策略,默认time_pack
//.setDateType(DateType.TIME_PACK)
.setMapperName("%sDao")
.setServiceName("%sService")
.setServiceImplName("%sServiceImpl");
//.setIdType(IdType.ASSIGN_ID)
//数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)
.setDriverName("com.mysql.cj.jdbc.Driver")
.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai")
.setUsername("root")
.setPassword("root");
//数据库信息查询类,默认由dbType类型决定,实现IDbQuery接口可自定义数据库查询sql
//.setDbQuery()
//不知道干嘛的,官网写的是public,我改成其他都没有发现变化
//.setSchemaName("private")
//内置转换类型,默认由dbType类型决定。可实现或重写实现了 IColumnType 接口的类,自定义转换为自己需要的 java 类型
//.setTypeConvert(new MySqlTypeConvert())
//数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表
StrategyConfig strategyConfig = new StrategyConfig();
//是否大写命名
strategyConfig.setCapitalMode(true)
//是否跳过视图
.setSkipView(true)
//数据库表映射到实体的命名策略
.setNaming(NamingStrategy.underline_to_camel)
//数据库表字段映射到实体的命名策略,未指定按照naming执行
//.setColumnNaming(NamingStrategy.no_change)
//生成表
.setInclude("operate_log", "user")
.setEntityBuilderModel(true)
.setEntityLombokModel(true)
.setRestControllerStyle(true)
.setEntityTableFieldAnnotationEnable(true);
//包名配置
PackageConfig packageConfig = new PackageConfig();
//父包名
packageConfig.setParent("com.ljj")
.setMapper("dao")
.setService("service")
.setController("controller")
.setEntity("entity")
.setXml("mapper");
//自定义模板配置
//TemplateConfig templateConfig = new TemplateConfig();
//templateConfig.setEntity("/templates/entity.java");
AutoGenerator autoGenerator = new AutoGenerator();
autoGenerator.setGlobalConfig(config)
.setStrategy(strategyConfig)
.setDataSource(dataSourceConfig)
.setTemplateEngine(new FreemarkerTemplateEngine())
.setPackageInfo(packageConfig);
autoGenerator.execute();
log.info("=============代码生成成功================");
}
}