zoukankan      html  css  js  c++  java
  • 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 参考链接

  • 相关阅读:
    async和await
    Promise
    初始flexbox
    制作一个slider动画
    初探React编程逻辑(结合业务需求)
    原型(prototype)和继承(inherit)
    什么是词法环境(lexical scope)
    typeScript是什么
    typeScript基础类型
    原型,原型链,call/apply
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/14929256.html
Copyright © 2011-2022 走看看