mybatis plus generator(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

什么是 MyBatis Plus Generator?

在 Java 开发领域,MyBatis Plus Generator 是一款基于 MyBatis Plus 框架的代码生成工具。它能够根据数据库表结构,自动生成实体类、Mapper 接口、Service 层代码以及对应的 XML 文件。想象一下,如果将开发过程比作建造房屋,那么 MyBatis Plus Generator 就像一套预先设计好的建筑模板,能快速搭建出房屋的基础框架,让开发者可以专注于房屋内部的装修与功能设计。

这一工具的核心优势在于:减少重复劳动,提升开发效率,同时确保代码规范性和一致性。对于需要频繁与数据库交互的项目(如后台管理系统、电商系统),它能显著降低开发者的工作量。


环境搭建与依赖配置

1. 项目准备

要使用 MyBatis Plus Generator,首先需要一个基于 Maven 的 Java 项目。以下是基础依赖清单:

<dependencies>
    <!-- MyBatis Plus 核心依赖 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.2</version>
    </dependency>
    
    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
    
    <!-- MyBatis Plus Generator 依赖 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.8.1</version>
    </dependency>
    
    <!-- Velocity 模板引擎 -->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.3</version>
    </dependency>
</dependencies>

2. 数据库连接配置

application.properties 中配置数据库连接信息:

spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

代码生成原理解析

1. 工作流程

MyBatis Plus Generator 的核心逻辑分为三步:

  1. 数据库元数据获取:通过 JDBC 连接扫描指定数据库的表结构,获取字段名、类型、注释等信息。
  2. 模板渲染:使用 Velocity 模板引擎,将元数据填充到预设的代码模板中,生成对应的 Java 文件。
  3. 文件输出:将生成的文件写入指定的目录路径。

这一过程类似于工厂流水线:原材料(数据库表)经过加工(模板处理)后,最终产出成品(代码文件)。

2. 模板引擎的作用

Velocity 是一个基于 Java 的模板引擎,它允许开发者通过预定义的模板(如 .vm 文件)控制代码的生成格式。例如,在生成实体类时,模板会根据字段类型自动匹配 Java 的包装类(如将 INT 映射为 Integer),并添加 @TableField 注解。


第一个生成器案例:从数据库到代码

1. 创建测试数据库表

以用户管理为例,创建 user 表:

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `name` varchar(30) NOT NULL COMMENT '用户名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';

2. 编写生成器配置类

创建一个 Java 类 Generator.java,配置生成规则:

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

public class Generator {
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
        
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/test_db?useSSL=false");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        mpg.setDataSource(dsc);
        
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        gc.setAuthor("Your Name");
        gc.setOpen(false); // 生成后是否打开资源管理器
        gc.setFileOverride(true); // 覆盖已生成文件
        mpg.setGlobalConfig(gc);
        
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example.demo");
        pc.setEntity("entity");
        pc.setMapper("mapper");
        pc.setService("service");
        pc.setController("controller");
        mpg.setPackageInfo(pc);
        
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel); // 下划线转驼峰
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true); // 使用 Lombok
        strategy.setInclude("user"); // 需要生成的表名
        mpg.setStrategy(strategy);
        
        // 使用 Velocity 模板引擎
        mpg.setTemplateEngine(new VelocityTemplateEngine());
        mpg.execute();
    }
}

3. 运行结果

执行 Generator 类后,项目目录中将生成以下文件:

文件路径说明
entity/User.java实体类,包含字段与注解
mapper/UserMapper.javaMapper 接口,继承 BaseMapper
mapper/xml/UserMapper.xmlSQL 映射文件
service/UserService.javaService 接口
service/impl/UserServiceImpl.javaService 实现类
controller/UserController.java控制器层代码

进阶用法:自定义代码生成

1. 自定义包结构

通过修改 PackageConfig,可以灵活调整生成路径。例如:

PackageConfig pc = new PackageConfig();
pc.setParent("com.example");
pc.setEntity("domain");
pc.setMapper("dao");

2. 修改模板内容

如果对生成的代码格式不满意,可以替换默认模板。步骤如下:

  1. 在项目中创建 templates 文件夹。
  2. 将 MyBatis Plus 提供的模板(如 entity.java.vm)复制到该目录。
  3. 修改模板内容,例如添加自定义注释或字段:
## 示例:修改 entity.java.vm 的字段生成逻辑
public class ${entity} {
    // 新增自定义字段
    private String customField;

    // 原始字段生成逻辑保持不变
    #foreach($column in $columns)
    private $!{column.javaType} $!{column.javaField};
    #end
}

3. 排除或包含字段

通过 StrategyConfigignoreColumns 参数,可以排除特定字段:

strategy.setIgnoreColumns("create_time,update_time");

最佳实践与注意事项

1. 代码规范与维护

  • 版本控制:将生成的代码纳入 Git 管理,但需注意:如果表结构变更后重新生成代码,需手动解决冲突。
  • 分层设计:建议将生成的代码与业务逻辑代码分离,避免直接修改生成的类(应通过继承或组合扩展功能)。

2. 性能优化

  • 多线程生成:对于大型项目,可考虑通过 AutoGeneratorsetTemplateEngine 方法集成多线程模板引擎。
  • 缓存元数据:在频繁生成代码时,可以缓存数据库元数据以减少重复查询。

3. 与框架的结合

  • Spring Boot 集成:通过 @MapperScan 注解扫描 Mapper 接口,无需手动配置 XML 文件路径。
  • 单元测试:生成代码后,建议编写单元测试验证基础 CRUD 操作。

总结与展望

MyBatis Plus Generator 通过自动化生成代码,显著提升了开发效率,尤其适合需要快速搭建基础功能的项目。它不仅减少了重复劳动,还通过模板机制保证了代码的一致性。对于初学者而言,它是学习 MyBatis Plus 的绝佳工具;对于中级开发者,它能帮助快速构建项目骨架,将精力集中在业务逻辑的实现上。

未来,随着 MyBatis Plus 生态的不断完善,代码生成器可能会增加更多智能化功能,例如自动识别数据库主键策略、根据注释生成接口文档等。开发者应持续关注其更新,以充分利用工具带来的效率提升。

通过本文的讲解,希望读者能够掌握 MyBatis Plus Generator 的核心用法,并在实际项目中灵活应用这一工具。记住:自动化工具是开发者的朋友,但始终要以业务需求为导向,合理规划代码结构与生成策略。

最新发布