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 的核心逻辑分为三步:
- 数据库元数据获取:通过 JDBC 连接扫描指定数据库的表结构,获取字段名、类型、注释等信息。
- 模板渲染:使用 Velocity 模板引擎,将元数据填充到预设的代码模板中,生成对应的 Java 文件。
- 文件输出:将生成的文件写入指定的目录路径。
这一过程类似于工厂流水线:原材料(数据库表)经过加工(模板处理)后,最终产出成品(代码文件)。
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.java | Mapper 接口,继承 BaseMapper |
mapper/xml/UserMapper.xml | SQL 映射文件 |
service/UserService.java | Service 接口 |
service/impl/UserServiceImpl.java | Service 实现类 |
controller/UserController.java | 控制器层代码 |
进阶用法:自定义代码生成
1. 自定义包结构
通过修改 PackageConfig
,可以灵活调整生成路径。例如:
PackageConfig pc = new PackageConfig();
pc.setParent("com.example");
pc.setEntity("domain");
pc.setMapper("dao");
2. 修改模板内容
如果对生成的代码格式不满意,可以替换默认模板。步骤如下:
- 在项目中创建
templates
文件夹。 - 将 MyBatis Plus 提供的模板(如
entity.java.vm
)复制到该目录。 - 修改模板内容,例如添加自定义注释或字段:
## 示例:修改 entity.java.vm 的字段生成逻辑
public class ${entity} {
// 新增自定义字段
private String customField;
// 原始字段生成逻辑保持不变
#foreach($column in $columns)
private $!{column.javaType} $!{column.javaField};
#end
}
3. 排除或包含字段
通过 StrategyConfig
的 ignoreColumns
参数,可以排除特定字段:
strategy.setIgnoreColumns("create_time,update_time");
最佳实践与注意事项
1. 代码规范与维护
- 版本控制:将生成的代码纳入 Git 管理,但需注意:如果表结构变更后重新生成代码,需手动解决冲突。
- 分层设计:建议将生成的代码与业务逻辑代码分离,避免直接修改生成的类(应通过继承或组合扩展功能)。
2. 性能优化
- 多线程生成:对于大型项目,可考虑通过
AutoGenerator
的setTemplateEngine
方法集成多线程模板引擎。 - 缓存元数据:在频繁生成代码时,可以缓存数据库元数据以减少重复查询。
3. 与框架的结合
- Spring Boot 集成:通过
@MapperScan
注解扫描 Mapper 接口,无需手动配置 XML 文件路径。 - 单元测试:生成代码后,建议编写单元测试验证基础 CRUD 操作。
总结与展望
MyBatis Plus Generator 通过自动化生成代码,显著提升了开发效率,尤其适合需要快速搭建基础功能的项目。它不仅减少了重复劳动,还通过模板机制保证了代码的一致性。对于初学者而言,它是学习 MyBatis Plus 的绝佳工具;对于中级开发者,它能帮助快速构建项目骨架,将精力集中在业务逻辑的实现上。
未来,随着 MyBatis Plus 生态的不断完善,代码生成器可能会增加更多智能化功能,例如自动识别数据库主键策略、根据注释生成接口文档等。开发者应持续关注其更新,以充分利用工具带来的效率提升。
通过本文的讲解,希望读者能够掌握 MyBatis Plus Generator 的核心用法,并在实际项目中灵活应用这一工具。记住:自动化工具是开发者的朋友,但始终要以业务需求为导向,合理规划代码结构与生成策略。