1 前言
之前的文章里介绍过MyBatis Plus
的使用,这里补上一篇文章结合Spring Boot
介绍代码生成器的使用。
2 为什么需要代码生成器
使用代码生成器可以生成一些固定模板的代码,比如:
Controller
层代码Service
层代码mapper
- 实体类
比如一个User
类可以生成如下代码:
3 环境
本次示例使用的环境如下:
MyBaits Plus 3.5.1
MyBatis Plus Generator 3.5.2
4 准备数据表
DROP DATABASE IF EXISTS test;
CREATE DATABASE test;
USE test;
CREATE TABLE user(
id BIGINT PRIMARY KEY ,
name VARCHAR(30) NOT NULL
);
5 创建项目并导入依赖
创建一个新的Spring Boot
项目,然后导入如下依赖:
runtimeOnly 'mysql:mysql-connector-java'
implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.1'
implementation 'com.baomidou:mybatis-plus-generator:3.5.2'
implementation 'org.freemarker:freemarker:2.3.31'
除了starter
和generator
外,还需要一个模板引擎(可选Velocity
、Freemarker
、Beetl
,默认Velocity
),这里选择的是Freemarker
。
Maven
版本如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
6 新建一个生成器类
该类用于进行代码生成的配置:
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
public class Generator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/test", "root", "123456")
.globalConfig(builder ->
builder.author("author").outputDir(System.getProperty("user.dir") + "/src/main/java")
.build())
.packageConfig(
builder -> builder.parent("com.example.demo").moduleName("user").build())
.strategyConfig(
builder -> builder.addInclude("user").entityBuilder().enableLombok()
.disableSerialVersionUID().build()
)
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}
简单说一下配置:
create()
:数据库连接的参数globalConfig()
:作者、输出目录packageConfig()
:父包名、模块名strategyConfig()
:包含的表、开启Lombok
模型、禁用生成serialVersionUID
templateEngine()
:设置模板引擎,注意需要导入对应的依赖,这里使用的是Freemarker
准备好以后直接运行main
,就会在src/main/java
下生成一个user
文件夹:
7 测试运行
首先修改一下配置文件,添加数据源:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
修改UserController
如下,添加一个测试方法:
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserController {
private final UserServiceImpl userService;
@GetMapping("/test")
public String test() {
return userService.getById(1).toString();
}
}
此时如果直接尝试运行main
方法,会报错如下:
找不到UserMapper
这个Bean
,解决方法就是在UserMapper
加上一个@Mapper
即可:
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
或者在main
类加上一个@MapperScan
,加上mapper
所在的全限定路径:
@SpringBootApplication
@MapperScan("com.example.demo.user.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
这样访问localhost:8080/test
就可以访问到id=1
的用户了:
8 其他配置
上面只是介绍了最简单的生成器配置,实际上完整的代码生成器配置如下:
DataSourceConfig
:数据源配置,包括数据库类型、驱动、连接URL
、用户名、密码等GlobalConfig
:全局配置,可以指定作者、输出的代码目录等,同时支持Kotlin
和Swagger2
PackageConfig
:包配置,指定代码生成的包名,包括mapper
包名、service
包名、controller
包名等TemplateConfig
:模板配置,可以自定义生成的模板,包括entity
模板、service
模板、controller
模板、mapper
模板、mapper xml
模板等InjectionConfig
:注入配置,可以自定义配置Map
对象等StrategyConfig
:策略配置,包含Entity
策略配置、Controller
策略配置、Service
策略配置和Mapper
策略配置,可以设置父类、设置一些文件的名称等等
详细请查看官方文档。
9 参考源码
Java
版:
Kotlin
版:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。