15、Mybatis-Plus入门 - 代码生成器(3.5.0版本)
AutoGenerator
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
也可以自定义生成模板,生成更丰富的后台代码,简化开发。
默认风格案例
(1)引入依赖
MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:
1、 添加代码生成器依赖,3.5.0不兼容之前的版本;
<!--代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.0</version>
</dependency>
1、 添加模板引擎依赖,MyBatis-Plus支持Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎;
<!-- 代码生成器模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
(2)编写配置
详细配置说明参考官网
配置项列表:
配置项 | 说明 |
---|---|
数据源配置 | DataSourceConfig:指定需要生成代码的具体数据库 |
数据库表配置 | StrategyConfig:指定需要生成哪些表或者排除哪些表 |
包名配置 | PackageConfig:指定生成代码的包路径 |
模板配置 | TemplateConfig:可自定义代码生成的模板,实现个性化操作 |
全局策略配置 | GlobalConfig |
注入配置 | InjectionConfig:可注入自定义参数等操作以实现个性化操作 |
public class Generator {
/**
* <p>
* 读取控制台内容
* </p>
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入" + tip + ":");
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
// 全局策略配置
GlobalConfig globalConfig = GeneratorBuilder.globalConfigBuilder()
// 覆盖已生成文件
.fileOverride()
// 生成后是否打开生成目录
.openDir(true)
// 指定输出目录 默认值: windows:D:// linux or mac : /tmp
.outputDir("D:\\output")
// 生成swagger注解
.enableSwagger()
// 作者名
.author("pearl")
// 时间策略
.dateType(DateType.TIME_PACK)
// 注释日期格式
.commentDate("yyyy-MM-dd")
.build();
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig
// 驱动连接的URL、数据库连接用户名、数据库连接密码
.Builder("jdbc:mysql://127.0.0.1:3306/angel_admin?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai", "root", "123456")
// 类型转换,数据库=》JAVA类型
.typeConvert(new MySqlTypeConvert())
// 关键字处理 ,这里选取了mysql5.7文档中的关键字和保留字(含移除)
.keyWordsHandler(new MySqlKeyWordsHandler())
// 数据库信息查询类,默认由 dbType 类型决定选择对应数据库内置实现
.dbQuery(new MySqlQuery())
// 数据库 schema name
.schema("mybatis-plus")
.build();
// 包配置
PackageConfig packageConfig = new PackageConfig.Builder()
// 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
.parent(scanner("父包名"))
// 父包模块名
.moduleName(scanner("模块名"))
.build();
// 配置模板
//TemplateConfig templateConfig = new TemplateConfig.Builder().disable().build();//激活所有默认模板
// 添加以上配置到AutoGenerator中
AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfig); // 数据源配置
autoGenerator.global(globalConfig); // 全局策略配置
autoGenerator.packageInfo(packageConfig); // 包配置
//autoGenerator.template(templateConfig); // 配置模板
// 生成代码
autoGenerator.execute();
}
}
(3)测试
1、 启动main线程,输入;
2、 查看生成文件,发现自动生成了相关代码,导入工程后即可使用,更加详细的配置参考官网即可,比如设置lombok、swagger、id生成策略等等;
自定义模板案例
使用默认模块可以生成代码,但是某些情况下,默认模板可能不满足当前需求,需要自定义模板,下面已
1、 替换velocity引擎为freemarker;
<!-- 代码生成器模板引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
1、 复制源码中的模板到当前项目,只复制.ftl结尾的即可(freemarker模板);
复制到当前目录:
2、 生成类添加模板引擎配置;
// 配置模板
TemplateConfig templateConfig = new TemplateConfig.Builder()
//指定自定义模板路径, 位置:/resources/templates/entity2.java.ftl(或者是.vm)
//注意不要带上.ftl(或者是.vm), 会根据使用的模板引擎自动识别
.build();
// 添加以上配置到AutoGenerator中
AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfig); // 数据源配置
autoGenerator.global(globalConfig); // 全局策略配置
autoGenerator.packageInfo(packageConfig); // 包配置
autoGenerator.template(templateConfig); // 配置模板
// 指定引擎 生成代码
autoGenerator.execute(new FreemarkerTemplateEngine());
1、 根据需求,修改模板,比如在controller添加注入对应的service层,并添加根据ID查询实体类的接口;
@Autowired ${
table.serviceName} ${
table.serviceName?uncap_first};
@GetMapping("/get${entity}")
public R<${
entity}> get${
entity}(Long id){
return R.ok(${
table.serviceName?uncap_first}.getById(id));
}
1、 测试,发现已经根据需求实现了响应的功能,实际使用时,应该是按需修改,这里只做简单演示;