Spring Boot demo系列(十一):MyBatis Plus Generator代碼生成


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即可:

@Mapper
public 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版:

10 參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM