1 前言

MyBatis Plus starter最近更新了3.4.3.1版本,而MyBatis Plug Generator更新到了3.5.0版本,然而官网文档还没有更新生成器的代码,另外在之前的文章里介绍过MyBatis Plus的应用,因而这里补上一篇文章联合Spring Boot介绍代码生成器的应用。

2 为什么须要代码生成器

应用代码生成器能够生成一些固定模板的代码,比方:

  • Controller层代码
  • Service层代码
  • mapper
  • 实体类

比方一个User类能够生成如下代码:

3 环境

本次示例应用的环境如下:

  • Spring Boot 2.5.1
  • MyBaits Plus 3.4.3.1
  • MyBatis Plus Generator 3.5.0

4 筹备数据表

这里为了方便使用Workbench创立一个用户表User

5 创立我的项目并导入依赖

创立一个新的Spring Boot我的项目,而后导入如下依赖:

implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.3.1' implementation 'com.baomidou:mybatis-plus-generator:3.5.0'implementation 'org.apache.velocity:velocity-engine-core:2.3'implementation 'org.realityforge.org.jetbrains.annotations:org.jetbrains.annotations:1.7.0'

除了startergenerator后,还须要一个模板引擎(可选VelocityFreemarkerBeetl,默认Velocity)和一个注解依赖(jetbrains.annotations)。

Maven版本如下:

<dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-boot-starter</artifactId>    <version>3.4.3.1</version></dependency><dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-generator</artifactId>    <version>3.5.0</version></dependency><dependency>    <groupId>org.apache.velocity</groupId>    <artifactId>velocity-engine-core</artifactId>    <version>2.3</version></dependency><dependency>    <groupId>org.realityforge.org.jetbrains.annotations</groupId>    <artifactId>org.jetbrains.annotations</artifactId>    <version>1.7.0</version></dependency>

6 新建一个生成器类

该类用于进行代码生成的配置:

import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.config.*;public class MyBatisPlusGenerator {    public static void main(String[] args) {        DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/test","root","123456").build();        String projectPath = System.getProperty("user.dir");        GlobalConfig globalConfig = new GlobalConfig.Builder().outputDir(projectPath+"/src/main/java").openDir(false).build();        PackageConfig packageConfig = new PackageConfig.Builder().moduleName("test").parent("com.example.test").build();        AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfig);        autoGenerator.global(globalConfig).packageInfo(packageConfig);        autoGenerator.execute();    }}

代码生成器配置相比起之前的版本,应用了Builder模式代替了原来的setter模式:

DataSourceConfig dataSourceConfig = new DataSourceConfig(); // 3.5.0版本中默认构造方法变成公有,无奈编译通过dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");dataSourceConfig.setUsername("root");dataSourceConfig.setPassword("password");

下面的代码中设置了数据源、输入的代码门路以及输入的包名,依据须要进行批改即可:

DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/test","root","123456").build();String projectPath = System.getProperty("user.dir");GlobalConfig globalConfig = new GlobalConfig.Builder().outputDir(projectPath+"/src/main/java").openDir(false).build();PackageConfig packageConfig = new PackageConfig.Builder().moduleName("test").parent("com.example.test").build();

筹备好当前间接运行main,就会在src/main/java下生成一个test文件夹:

7 测试运行

首先批改一下配置文件,增加数据源:

spring:  datasource:    url: jdbc:mysql://localhost:3306/test    username: root    password: 123456

批改UserController如下,增加一个测试方法:

@RestController@RequestMapping("/test/user")public class UserController {    @Resource    private UserServiceImpl userService;    @GetMapping("/")    public String test() {        return userService.getById(1).toString();    }}

此时如果间接尝试运行main办法,会报错如下:

找不到UserMapper这个Bean,解决办法就是在UserMapper加上一个@Mapper即可:

@Mapperpublic interface UserMapper extends BaseMapper<User> {}

或者在main类加上一个@MapperScan,加上mapper所在的全限定门路:

@SpringBootApplication@MapperScan("com.example.test.test.mapper")public class TestApplication {    public static void main(String[] args) {        SpringApplication.run(TestApplication.class, args);    }}

这样拜访localhost:8080/test/user/就能够拜访到id=1的用户了:

8 其余配置

下面只是介绍了最简略的生成器配置,实际上残缺的代码生成器配置如下:

  • DataSourceConfig:数据源配置,包含数据库类型、驱动、连贯URL、用户名、明码等
  • StrategyConfig:数据库表配置(然而这个命名的确看不出来),能够指定对哪些表生成代码或者排除哪些表不生成代码,同时能够设置生成的字段前缀,还能够反对含糊匹配表名(排除或蕴含)等
  • PackageConfig:包配置,指定代码生成的模块名、包名、mapper命名、service命名、controller命名等
  • TemplateConfig:模板配置,能够自定义生成的模板,包含实体类模板、service模板、controller模板、mapper模板、mapper xml模板等
  • GlobalConfig:全局配置,能够指定输入的代码目录、是否覆盖文件等配置,同时反对KotlinSwagger2
  • InjectionConfig:注入配置,能够自定义配置Map对象等

具体请查看官网文档。

9 源码

参考源码,Java版:

  • Github
  • 码云

10 参考链接

  • MyBatis Plus官网文档