1. 什么是 MyBatis Generator?
MyBatis Generator(简称 MBG)是 MyBatis 官方提供的一款代码生成工具。它能够根据数据库表结构,自动生成对应的实体类(POJO)、Mapper 接口以及 XML 映射文件。这极大地减少了开发者在搭建数据访问层时的重复性工作,提升了开发效率,并保证了代码风格的一致性。
2. 核心功能与生成内容
MBG 主要生成以下三类核心文件:
- 实体类 (Model/Pojo):与数据库表字段一一对应的 Java 类,通常包含私有字段、Getter/Setter 方法以及 toString() 方法。
- Mapper 接口 (Mapper Interface):定义数据操作方法的 Java 接口,如
selectByPrimaryKey,insert,updateByPrimaryKey等。 - XML 映射文件 (Mapper XML):实现 Mapper 接口中定义的方法所对应的 SQL 语句映射。
此外,它还可以根据配置生成 Example 类(用于构建动态查询条件)和 SQL Provider 类(基于注解的动态 SQL)。
3. 快速开始:使用 Maven 插件
最常用的方式是通过 Maven 插件来运行 MBG。
3.1 添加插件配置
在项目的pom.xml文件中添加如下插件配置:
<build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.2</version> <configuration> <!-- 指定配置文件路径 --> <configurationFile>src/main/resources/generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> <dependencies> <!-- 数据库驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> </dependencies> </plugin> </plugins> </build>3.2 创建配置文件
在src/main/resources目录下创建generatorConfig.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 数据库连接信息 --> <context id="MySQLTables" targetRuntime="MyBatis3"> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/your_database" userId="your_username" password="your_password"> </jdbcConnection> <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 指定要生成的表,可以使用通配符 % --> <table tableName="user" domainObjectName="User"> <!-- 可选的列级配置,例如忽略某些字段 --> <!-- <columnOverride column="created_time" javaType="java.time.LocalDateTime"/> --> </table> <table tableName="order" domainObjectName="Order"/> </context> </generatorConfiguration>3.3 执行生成命令
在项目根目录下执行 Maven 命令:
mvn mybatis-generator:generate执行成功后,将在指定的包路径下生成对应的 Java 文件和 XML 文件。
4. 配置文件详解
4.1 核心配置节点
- <context>:定义生成上下文,可配置多个。最重要的属性是
targetRuntime,决定了生成代码的风格(如 MyBatis3, MyBatis3Simple)。 - <jdbcConnection>:配置数据库连接,用于读取表结构元数据。
- <javaModelGenerator>:配置实体类的生成规则,如包名、项目路径、是否启用子包等。
- <sqlMapGenerator>:配置 XML 映射文件的生成规则。
- <javaClientGenerator>:配置 Mapper 接口的生成规则和类型(如 XMLMAPPER, ANNOTATEDMAPPER)。
- <table>:指定要生成代码的具体表。可以配置多个,支持通配符匹配表名。
4.2 常用 <table> 子配置
- <generatedKey>:配置自增主键。
- <columnOverride>:覆盖特定列的 Java 类型、JDBC 类型或处理器。
- <ignoreColumn>:忽略某些字段,不生成到实体类中。
- <property>:表级别的属性,如是否生成 Example 类 (
enableCountByExample="false")。
5. 高级特性与自定义
5.1 使用插件 (Plugin)
MBG 支持插件机制,可以干预代码生成过程。例如,官方提供的LombokPlugin可以为实体类生成 Lombok 注解,从而省略 Getter/Setter 方法。
<context ...> <plugin type="org.mybatis.generator.plugins.LombokPlugin"> <property name="data" value="true"/> <!-- 生成 @Data 注解 --> </plugin> ... </context>5.2 自定义注释生成器
通过实现CommentGenerator接口,可以自定义实体类字段、方法以及 XML 文件中的注释内容。
5.3 生成 Example 类
当targetRuntime设置为MyBatis3时,默认会为每个表生成一个 Example 类,用于构建复杂的动态查询条件(如andNameLike)。如果不需要,可以在<table>中配置enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"来禁用。
6. 注意事项与最佳实践
- 配置文件版本管理:将
generatorConfig.xml纳入版本控制,便于团队共享和复现。 - 生成文件覆盖:配置
<overwrite>true</overwrite>时要谨慎,避免覆盖手动修改过的代码。建议将生成的代码与业务代码分离。 - 数据库驱动兼容性:确保插件依赖的数据库驱动版本与项目运行时使用的版本一致。
- 增量生成:MBG 不会删除已生成的文件。当表结构变更(如删除字段)时,需要手动清理旧的实体类字段或重新生成全部文件。
- 结合 Lombok 使用:强烈推荐使用 Lombok 插件,可以极大简化实体类,使代码更简洁。
7. 总结
MyBatis Generator 是 MyBatis 生态中提升开发效率的利器。通过简单的 XML 配置,即可自动化生成数据访问层的基础代码,让开发者更专注于业务逻辑的实现。掌握其配置方法和高级特性,能够根据项目需求进行灵活定制,是 Java 后端开发者必备的技能之一。