MyBatis Generator:根据数据库表生成 MyBatis 的实体类、Mapper 接口和 XML 映射文件

📅 2026/7/9 7:17:56 👁️ 阅读次数 📝 编程学习
MyBatis Generator:根据数据库表生成 MyBatis 的实体类、Mapper 接口和 XML 映射文件

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 后端开发者必备的技能之一。