MyBatisPlus 代码生成器如何使用?一篇文章学会它!!!
目录一. MP代码生成器简介二. 准备工作2.1 建立数据库和表2.1 创建项目三. 编写工具类3.1 创建类3.2 定义数据库连接变量3.3 定义单表代码生成函数3.4 扩展为任意表自动生成代码四. 测试代码生成器4.1 测试单表生成 model 方法一. MP代码生成器简介代码生成器是 MyBatis-Plus 提供的一个非常实用的功能可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等代码极大地提高了开发效率。我们从网上拉取的一些博主项目特别是Spring Boot项目很多就会集成 MyBatis-Plus 使用MyBatis-Plus 提供的代码生成器对于单表增删改查的项目来说可以极大的提升开发效率。二. 准备工作2.1 建立数据库和表不管什么样的项目都肯定是需要和数据库打交道的所我们先把数据库表建立完成。建表 SQL 如下需要的小伙伴们直接复制。/* Navicat Premium Data Transfer Source Server : localhost Source Server Type : MySQL Source Server Version : 80031 (8.0.31) Source Host : localhost:3306 Source Schema : vueblog Target Server Type : MySQL Target Server Version : 80031 (8.0.31) File Encoding : 65001 Date: 09/01/2025 09:34:43 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0; -- ---------------------------- -- Table structure for m_blog -- ---------------------------- DROP TABLE IF EXISTS m_blog; CREATE TABLE m_blog ( id bigint NOT NULL AUTO_INCREMENT COMMENT 主键ID, user_id bigint NOT NULL COMMENT 用户ID, title varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 文章标题, description varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 描述, content longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT 目录, created datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 创建时间, status tinyint NULL DEFAULT NULL COMMENT 状态, PRIMARY KEY (id) USING BTREE ) ENGINE InnoDB AUTO_INCREMENT 15 CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ROW_FORMAT Dynamic; -- ---------------------------- -- Table structure for m_user -- ---------------------------- DROP TABLE IF EXISTS m_user; CREATE TABLE m_user ( id bigint NOT NULL AUTO_INCREMENT COMMENT 主键ID, username varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 用户名, avatar varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 用户头像, email varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 用户邮箱, password varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT 用户密码, status int NOT NULL COMMENT 用户状态, created datetime NULL DEFAULT NULL COMMENT 创建时间, last_login datetime NULL DEFAULT NULL COMMENT 上次登录时间, PRIMARY KEY (id) USING BTREE, INDEX UK_USERNAME(username ASC) USING BTREE ) ENGINE InnoDB AUTO_INCREMENT 2 CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci ROW_FORMAT Dynamic; SET FOREIGN_KEY_CHECKS 1;2.1 创建项目想要使用 MyBatis-Plus肯定要先创建一个 Spring Boot项目。然后我们需要在 pom 文件中添加各种依赖这里我说几个可以也推荐用的依赖包。如下所示这两个插件在下面使用代码生成器时都会用到!-- lombok 实体插件依赖 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency !-- swagger 依赖 -- dependency groupIdio.springfox/groupId artifactIdspringfox-boot-starter/artifactId version3.0.0/version /dependency除了上面两个插件外再加入 MyBatis-Plus 依赖和代码生成器依赖如下!--mp-- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency !--mp代码生成器-- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-generator/artifactId version3.5.3.1/version /dependency三. 编写工具类3.1 创建类public class FastCodeGenerator { }3.2 定义数据库连接变量public class FastCodeGenerator { // 定义数据库 public static final String MYSQL jdbc:mysql://localhost:3306/vueblog? encryptfalsetrustServerCertificatetrueuseUnicodetruecharacterEncodingUTF-8autoReconnecttrueserverTimezoneAsia/ShanghairewriteBatchedStatementstrue; // 数据库用户名 public static final String USERNAME root; // 数据库连接密码 public static final String PASSWORD 123456; }3.3 定义单表代码生成函数public class FastCodeGenerator { // 定义数据库 public static final String MYSQL jdbc:mysql://localhost:3306/vueblog? encryptfalsetrustServerCertificatetrueuseUnicodetruecharacterEncodingUTF-8autoReconnecttrueserverTimezoneAsia/ShanghairewriteBatchedStatementstrue; // 数据库用户名 public static final String USERNAME root; // 数据库连接密码 public static final String PASSWORD 123456; // 生成指定表代码,参数传递表名 public static void model(String tableName) { // 配置数据源,三个参数在上面已经定义过了 FastAutoGenerator.create(MYSQL, USERNAME, PASSWORD) // 全局配置 .globalConfig(builder - { // 设置作者这里随便设置,改成自己即可 builder.author(ZhangSir) // 开启 swagger 模式加入swagger 依赖在自动生成实体类时会根据数据库中的字段注释同步添加注释 .enableSwagger() // 覆盖已生成文件 .fileOverride() // 指定输出目录这里同步改成自己的项目路径即可即 盘符:/文件夹/文件夹/...文件夹/项目文件夹名称/src/main/java .outputDir(D:/code/workspace/vueblog/vueblog-java/src/main/java); }) // 包配置 .packageConfig(builder - { // 设置父包名这里自定义我取名叫 com.markerhub builder.parent(com.markerhub) // 设置XML生成路径和上卖弄代码路径类似mapper文件放置对应的 resource 文件夹中 .pathInfo(Collections.singletonMap(OutputFile.xml, D:/code/workspace/vueblog/vueblog-java/src/main/resources/mapper)); }) // 策略配置 .strategyConfig(builder - { // 设置需要生成的表名有方法参数传递 builder.addInclude(tableName) // 设置过滤表前缀上面咱们定义的表都是 m_开头如果以 t_ 开头则对应修改即可如果没有表前缀不加此配置即可 .addTablePrefix(m_) .entityBuilder() // 主键策略自增主键嘛,不必多说 .idType(IdType.AUTO) // 使用 Lombok就是前面加入的Lombok插件生成的实体类会自动加入Getter和Setter方法如果还需要toString和自动逸构造器再自行添加即可 .enableLombok() .mapperBuilder() .enableBaseColumnList() // XML中生成基础列 .enableBaseResultMap() // XML中生成基础结果集 .serviceBuilder() // 自定义 Service 文件名即表名Service作为业务接口类名 .formatServiceFileName(%sService) // 自定义 Service 实现即表名ServiceImpl作为接口实现类名 .formatServiceImplFileName(%sServiceImpl) 类文件名 .controllerBuilder() // 开启 RestController 风格自动生成的Controller控制器类会添加RestController注解 .enableRestStyle(); }) // 模板引擎 .templateEngine(new VelocityTemplateEngine()) // 使用 Velocity 模板引擎 .execute(); } }3.4 扩展为任意表自动生成代码在实际开发过程中我们不会一张表一张表的去生成代码而是扫描整个库或者针对某几个表现在我们对上面的单表代码生成做优化再写一个方法即可如下所示public class FastCodeGenerator { // 定义数据库 public static final String MYSQL jdbc:mysql://localhost:3306/vueblog? encryptfalsetrustServerCertificatetrueuseUnicodetruecharacterEncodingUTF-8autoReconnecttrueserverTimezoneAsia/ShanghairewriteBatchedStatementstrue; // 数据库用户名 public static final String USERNAME root; // 数据库连接密码 public static final String PASSWORD 123456; // 生成指定表代码,参数传递表名 public static void model(String tableName) { // 配置数据源,三个参数在上面已经定义过了 FastAutoGenerator.create(MYSQL, USERNAME, PASSWORD) // 全局配置 .globalConfig(builder - { // 设置作者这里随便设置,改成自己即可 builder.author(ZhangSir) // 开启 swagger 模式加入swagger 依赖在自动生成实体类时会根据数据库中的字段注释同步添加注释 .enableSwagger() // 覆盖已生成文件 .fileOverride() // 指定输出目录这里同步改成自己的项目路径即可即 盘符:/文件夹/文件夹/...文件夹/项目文件夹名称/src/main/java .outputDir(D:/code/workspace/vueblog/vueblog-java/src/main/java); }) // 包配置 .packageConfig(builder - { // 设置父包名这里自定义我取名叫 com.markerhub builder.parent(com.markerhub) // 设置XML生成路径和上卖弄代码路径类似mapper文件放置对应的 resource 文件夹中 .pathInfo(Collections.singletonMap(OutputFile.xml, D:/code/workspace/vueblog/vueblog-java/src/main/resources/mapper)); }) // 策略配置 .strategyConfig(builder - { // 设置需要生成的表名有方法参数传递 builder.addInclude(tableName) // 设置过滤表前缀上面咱们定义的表都是 m_开头如果以 t_ 开头则对应修改即可如果没有表前缀不加此配置即可 .addTablePrefix(m_) .entityBuilder() // 主键策略自增主键嘛,不必多说 .idType(IdType.AUTO) // 使用 Lombok就是前面加入的Lombok插件生成的实体类会自动加入Getter和Setter方法如果还需要toString和自动逸构造器再自行添加即可 .enableLombok() .mapperBuilder() .enableBaseColumnList() // XML中生成基础列 .enableBaseResultMap() // XML中生成基础结果集 .serviceBuilder() // 自定义 Service 文件名即表名Service作为业务接口类名 .formatServiceFileName(%sService) // 自定义 Service 实现即表名ServiceImpl作为接口实现类名 .formatServiceImplFileName(%sServiceImpl) 类文件名 .controllerBuilder() // 开启 RestController 风格自动生成的Controller控制器类会添加RestController注解 .enableRestStyle(); }) // 模板引擎 .templateEngine(new VelocityTemplateEngine()) // 使用 Velocity 模板引擎 .execute(); } // 优化参数变为可变参数为空时扫描整个数据库不为空时根据传递的参数去生成对应的代码 public static void generator(String... tableName){ // 定义数据库连接 Connection connection null; try { // 获取数据库连接 connection DriverManager.getConnection(MYSQL, USERNAME, PASSWORD); // 获取数据库元数据 DatabaseMetaData metaData connection.getMetaData(); ResultSet tables metaData.getTables(null, null, %, new String[]{TABLE}); // 循环可变参数生成整个数据库的代码如果参数长度为0说明没有人为传递表名扫描整个数据库 if (tableName.length 0) { while (tables.next()) { String table tables.getString(TABLE_NAME); model(table); } // 否则参数长度不为0说明人为传递了参数因为是可变参数管它传递了几个直接增强for循环遍历挨个生成即可 } else{ for (String table : tableName){ model(table); } } // 如果生成过程中报错捕获异常 } catch (SQLException e) { throw new RuntimeException(e); } } }四. 测试代码生成器到了这一步其实已经做完了我们只需要创建一个 Main 方法简单输入表名就可以测试了4.1 测试单表生成 model 方法如下图此时 entitymapperservice包都是空的然后调用 model 方法传递参数 m_user用户表方法运行成功可以看到右侧各个包中都已经生成了对应的 User 表的实体类Entity数据访问接口 UserMapper业务接口及实现类控制器UserController。打开实体类User可以看到Swagger 和 Lombok 注解均已生效生成了 Getter 和 Setter 方法ApiModelProperty 属性注解。非常方便。OK关于MyBatis-Plus 代码生成器就讲到这里啦内容不难基本上自己动手建一个 Maven 项目跟着文章中的代码走一遍就会了。