SpringBoot 集成 MybatisPlus 十二——代码生成器

2023-11-17 20:42:42 浏览数 (1)

1 代码生成器简介

代码生成器可以自动生成MybatisPlus代码。

如果不愿意手动编写和数据表对应的实体类及相关映射文件,MybatisPlus为我们提供了相关的效率提升工具(偷懒神器)——代码生成器,它可以读取数据库中的表信息,生成相应的可以供我们使用 MybatisPlus 代码。

与 Mybatis 的代码生成器 Mybatis Generator 二者的区别是:

  • Mybatis Generator 是基于xml文件进行配置,MybatisPlus 代码生成器是基于 java 代码进行配置;
  • Mybatis Generator 可以生成实体类、mapper接口、mapper映射文件;MybatisPlus代码生成器可以生成实体类、mapper接口、mapper映射文件、service类、controller类,功能更加强大。

2 添加依赖

在项目下的 pom.xml 文件中添加 mybatis-plus代码生成器需要的依赖。

代码语言:txt复制
<!--mybatis-plus代码生成器-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>
<!--mybatis-plus代码生成器依赖的模板引擎-->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.2</version>
</dependency>

3 编写代码生成器的配置类

在配置类中除了数据库连接信息(URL,用户名,密码),主要分为三部分:

  • 全局配置
  • 包配置
  • 生成策略配置

3.1 全局配置

在全局配置中,可以设置生成类里注释信息中的:

作者信息、

日期格式,及:

生成类目的地址的父目录信息、

开启swagger设置、

日期类型等。

3.2 包配置

在包配置部分,主要设置所有生成类包名所在前缀信息,按照不同层级区分的包名。

例如 实体层、mapper层、服务层、控制层的包名信息。

3.3 策略配置

在策略配置项中,主要配置的是生成类格式及数据表与生成类的映射关系信息:

如 表名前缀、表名后缀、开始配置实体类、生成的实体类中启用 lombok 模板、表中列名与实体类属性名之间是否使用下划线与驼峰的转换关系等。

3.4 具体配置信息

代码语言:java复制
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class MyGeneratorUtil {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3366/test", "root", "123456")
                //全局配置
                .globalConfig(builder -> {
                   builder.author("tester") //设置作者
                           .commentDate("yyyy-MM-dd") //注释日期格式
                           .outputDir(System.getProperty("user.dir")   "/testMybatisPlusAR/src/main/java") //指定输出目录
                           .fileOverride(); //覆盖文件
                })
                //包配置
                .packageConfig(builder -> {
                    builder.parent("com.test2") //包名的前缀
                            .entity("domain") //实体类包名
                            .mapper("mapper") //mapper接口包名
                            .service("service") //service包名
                            .controller("controller") //controller包名
                            .xml("mapper"); //映射文件包名
                })
                //策略配置
                .strategyConfig(builder -> {
                    builder.addInclude("User") //设置需要生成的表名或排除的表名,支持多张表
                            .addTablePrefix("") //设置表名前缀
                            .addTableSuffix("") //设置表名后缀
                            .entityBuilder() //开始实体类配置
                            .enableLombok() //开启lombok模型
                            .naming(NamingStrategy.underline_to_camel) //表名下划线转驼峰
                            .columnNaming(NamingStrategy.underline_to_camel); //列名下划线转驼峰
                })
                .execute();
    }
}

4 生成代码

运行上一步中创建的配置类,生成代码。

生成的代码效果如下

打开生成的实体类,因为所有属性及属性类型都是从数据库中读取,所以由程序控制的乐观锁及逻辑删除等功能是无法获取到的,缺少相应的注解外,可以看到与我们自己创建实体类已经相当接近,可以大幅减少实际的工作量。

代码语言:java复制
package com.test2.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;

/**
 * <p>
 * 
 * </p>
 *
 * @author tester
 * @since 2023-04-15
 */
@Getter
@Setter
@TableName("user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    private String username;

    private String gendar;

    private String remark;

    private Integer version;

    private Integer isDeleted;


}

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞