前言:本文末尾处附有自定义代码生成器的源码,感兴趣的可以前往下载。
零、本文纲要
一、代码生成器快速入门
二、源码使用快速入门
三、自定义代码生成器starter
一、代码生成器快速入门
1. 基础依赖
mybatis-plus
mybatis-plus-boot-starter
mybatis-plus-extension
mybatis-plus-core
mybatis-plus-annotation
mybatis-plus-generator
2. 测试代码
注意将下面的:url、username、password以及注释部分的内容改为自己测试模块的内容。
FastAutoGenerator.create("url", "username", "password")
.globalConfig(builder -> {
builder.author("baomidou") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("D://"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
.moduleName("system") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_simple") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
- 测试
各种类的缺失异常.png然后就报错了
Caused by:
官方提供的依赖除了未传递依赖 mp 包,还缺失了很大一部分依赖。所以,直接跟源码来探下究竟。
MyBatis-Plus 代码生成器(3.5.1+版本)GitHub网址。
下载源码研究.png二、源码使用快速入门
1. 查看源码结构
下载好源码后,映入眼帘的是 build.gradle
,可以看到官方是使用 gradle 来进行依赖等内容的统一管理的。
但是,我们通常使用maven进行项目开发,所以需要对管理工具做下简单调整。
我们需要通过查看 build.gradle
文件的 buildscript.dependencies
以及 ext.lib
的内容,来插入官方使用版本的依赖。
或者使用IDEA工具自动识别,add maven dependencies
。
2. 调整后的依赖
以下为IDEA工具添加的本地仓库的依赖,与以上不完全一致,如下:
<properties>
<mybatis.plus.generator.version>3.5.2</mybatis.plus.generator.version>
<mybatis.plus.annotation.version>3.4.3</mybatis.plus.annotation.version>
<mybatis.plus.core.version>3.4.3</mybatis.plus.core.version>
<mybatis.plus.extension.version>3.4.3</mybatis.plus.extension.version>
<kotlin.runtime.version>1.0.7</kotlin.runtime.version>
<freemarker.version>2.3.31</freemarker.version>
<velocity.version>1.5</velocity.version>
<beetl.version>3.10.0.RELEASE</beetl.version>
<mysql.connector.java.version>8.0.29</mysql.connector.java.version>
<slf4j.simple.version>1.7.21</slf4j.simple.version>
</properties>
<dependencies>
<!-- mybatis-plus生成器依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis.plus.generator.version}</version>
</dependency>
<!-- mybatis-plus注解依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>${mybatis.plus.annotation.version}</version>
</dependency>
<!-- mybatis-plus核心依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>${mybatis.plus.core.version}</version>
</dependency>
<!-- mybatis-plus额外拓展 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>${mybatis.plus.extension.version}</version>
</dependency>
<!-- 补充注解 -->
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-runtime</artifactId>
<version>${kotlin.runtime.version}</version>
</dependency>
<!-- freemarker模板框架 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
<!-- velocity工具 -->
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>${velocity.version}</version>
</dependency>
<!-- beetl工具 -->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>${beetl.version}</version>
</dependency>
<!-- mysql数据库连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.java.version}</version>
</dependency>
<!-- 日志依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.simple.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
3. 测试代码
此处如上,省略。
至此,我们已经可以使用代码生成器来帮助我们生成日常所需的代码了。但是,每次使用还需要各种配置依赖,写固定的代码逻辑并不是我们希望的。所以,我们考虑将此内容抽成一个starter,即拿即用。
三、自定义代码生成器starter
1. 明确生成器starter的目标
a、配置使用
b、省去逻辑代码编辑
2. 参考spring-boot-starter
① 自动装配
首先,添加 spring-boot-starter-web 依赖,也可以直接用starter,这个更全一些。
我们知道spring-boot项目自动装配会读取 src/main/resources/META-INF/spring.factories
文件,进而加载内部的内容。所以,我们编辑自己的自动装配类。如下:
Ⅰ 在上述目录添加 spring.factories 文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.stone.autoconfig.MyBatisPlusGeneratorAutoConfiguration
Ⅱ 编写 MyBatisPlusGeneratorAutoConfiguration 自动配置类
public class MyBatisPlusGeneratorAutoConfiguration {
}
② yml配置加载
spring-boot项目常常会编写application.yml配置文件,然后自动装配时会自动读取其内容。因此我们使用@ConfigurationProperties注解,来帮助我们读取指定配置。
代码生成器官方文档.png通过查阅MyBatis Plus-代码生成器官方文档,不难发现我们在做的核心内容起始就是配置:
a、 数据库配置(DataSourceConfig);
b、 全局配置(GlobalConfig);
c、 包配置(PackageConfig);
d、 模板配置(TemplateConfig)【不常用】;
e、 注入配置(InjectionConfig)【不常用】;
f、 策略配置(StrategyConfig)。
官方样例配置了其中5个,abcdf。因此,我们配置较为常用的5个,以及其较可能用到的属性、方法等。
Ⅰ 定制 数据库配置(DataSourceConfig)
编写 CustomDataSourceConfigProperties 类,此处抽取了经常配置的 url、username、password 举例,如下:
@Component
@ConfigurationProperties(prefix = "stone.datasource")
public class CustomDataSourceConfigProperties {
/**
* 驱动连接的URL
*/
private String url = null;
/**
* 数据库连接用户名
*/
private String username = "root";
/**
* 数据库连接密码
*/
private String password = "root";
//此处省略get/set方法
}
当然,此处如果为了方便,可以使用 lombok 依赖/插件。
编写 CustomDataSourceConfig 类,如下:
@Component
public class CustomDataSourceConfig {
@Autowired
private CustomDataSourceConfigProperties customDataSourceConfigProperties;
@Bean
public DataSourceConfig dataSourceConfig() {
//1. 获取数据库配置的建造者对象
DataSourceConfig.Builder builder = new DataSourceConfig.Builder(
//1.1 设置数据库URL
customDataSourceConfigProperties.getUrl(),
//1.2 设置用户名
customDataSourceConfigProperties.getUsername(),
//1.3 设置登录密码
customDataSourceConfigProperties.getPassword()
);
//2. 返回数据源配置对象
return builder.build();
}
}
Ⅱ 全局配置(GlobalConfig)
Ⅲ 包配置(PackageConfig)
Ⅳ 模板配置(TemplateConfig)【不常用】
Ⅴ 策略配置(StrategyConfig)
省略。
③ 编写自定义代码生成器工具类
编写CustomGenerator,如下:
public class CustomGenerator {
@Autowired
private GlobalConfig globalConfig;
@Autowired
private PackageConfig packageConfig;
@Autowired
private StrategyConfig strategyConfig;
@Autowired
private TemplateConfig templateConfig;
@Autowired
private DataSourceConfig dataSourceConfig;
public void generateCode() throws Exception {
//1. 生成器对象
AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfig);
//2. 配置全局属性
autoGenerator.global(globalConfig);
//3. 配置包属性
autoGenerator.packageInfo(packageConfig);
//4. 配置策略
autoGenerator.strategy(strategyConfig);
//5. 配置模板
autoGenerator.template(templateConfig);
//6. 开始生成Code
autoGenerator.execute();
}
}
④ 在自动配置类引入各个组件bean
@Import({
CustomDataSourceConfig.class,
CustomGlobalConfig.class,
CustomPackageConfig.class,
CustomStrategyConfig.class,
CustomTemplateConfig.class,
CustomDataSourceConfigProperties.class,
CustomGlobalConfigProperties.class,
CustomPackageConfigProperties.class,
CustomStrategyConfigProperties.class,
CustomTemplateConfigProperties.class
})
public class MyBatisPlusGeneratorAutoConfiguration {
@Bean
public CustomGenerator customGenerator() {
return new CustomGenerator();
}
}
此时,我们install一下我们的程序就可以在项目中使用自定义的starter生成代码。如果无法正常在项目中被加载,则手动build。
image.png添加依赖,在项目中测试:
Ⅰ 添加依赖
<dependency>
<groupId>com.stone.mybatis</groupId>
<artifactId>stone-mybatis-plus-generator-starter-simple</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
Ⅱ 编写application.yml配置文件
编写配置文件.pngstone:
datasource: # 数据源配置
url: "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false"
username: root
password: root
global: # 全局配置
author: stone
enable-swagger: true
output-dir: D:\JavaStudy\Level2\custom-generator-demo\src\main\java
package: # 包配置
parent: com.stone
xml: mapper.xml
strategy: # 策略配置
table-prefix: t_
Ⅲ 生成所需文件
@RunWith(SpringRunner.class)
@SpringBootTest(classes = GeneratorApplication.class)
public class GeneratorTest {
//注入自定义的生成器对象
@Autowired
private CustomGenerator customGenerator;
//测试生成代码
@Test
public void testGenerator() throws Exception {
customGenerator.generateCode();
}
}
生成的代码文件.png
生成的文件.png
⑤ 优化
我们常用的yml配置会有选项提示的内容,我们可以使用 spring-boot-configuration-processor 帮助我们完成此功能。
添加该依赖,然后执行 mvn:clean → install。此时,我们可以在项目的 target/classes/META-INF
目录下看到一个 spring-configuration-metadata.json
文件。将该文件复制至 src/main/resources/META-INF
目录下。
打开该文件,拖动到最下方,如下:
"hints": []
hints 提供默认选项的内容并未配置,还是空的。添加自己认为需要提醒的默认配置选项,如下:
"hints": [
{
"name": "stone.global.disable-open-dir",
"values": [
{
"value": false,
"description": "【默认】打开输出目录"
},
{
"value": true,
"description": "不打开输出目录"
}
]
}
]
优化后的效果.png
注意:在我们添加完 spring-configuration-metadata.json 文件后,将 spring-boot-configuration-processor 依赖注释掉。未注释的话,框架运行时又会生成一个该文件,同样的提示显示两条。
至此,我们就可以在我们想要使用的项目中使用自己的代码生成器生成代码了。
感兴趣的话也可以直接下载过去使用:stone-mybatis-plus-generator-starter-simple (github.com)。
四、结尾
以上即为MyBatis Plus-代码生成器的全部内容,感谢阅读。
网友评论