Spring Boot demo系列(九):MyBatis Plus Generator代码生成

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'

除了startergenerator外,还需要一个模板引擎(可选VelocityFreemarkerBeetl,默认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:全局配置,可以指定作者、输出的代码目录等,同时支持KotlinSwagger2
  • PackageConfig:包配置,指定代码生成的包名,包括mapper包名、service包名、controller包名等
  • TemplateConfig:模板配置,可以自定义生成的模板,包括entity模板、service模板、controller模板、mapper模板、mapper xml模板等
  • InjectionConfig:注入配置,可以自定义配置Map对象等
  • StrategyConfig:策略配置,包含Entity策略配置、Controller策略配置、Service策略配置和Mapper策略配置,可以设置父类、设置一些文件的名称等等

详细请查看官方文档

9 参考源码

Java版:

Kotlin版:

10 参考链接

posted @ 2021-06-25 00:54  氷泠  阅读(375)  评论(0编辑  收藏  举报