MyBatis Generator:根据数据库表生成 MyBatis 的实体类、Mapper 接口和 XML 映射文件
1. 什么是 MyBatis GeneratorMyBatis 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 groupIdorg.mybatis.generator/groupId artifactIdmybatis-generator-maven-plugin/artifactId version1.4.2/version configuration !-- 指定配置文件路径 -- configurationFilesrc/main/resources/generatorConfig.xml/configurationFile overwritetrue/overwrite verbosetrue/verbose /configuration dependencies !-- 数据库驱动依赖 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency /dependencies /plugin /plugins /build3.2 创建配置文件在src/main/resources目录下创建generatorConfig.xml文件?xml version1.0 encodingUTF-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 idMySQLTables targetRuntimeMyBatis3 jdbcConnection driverClasscom.mysql.cj.jdbc.Driver connectionURLjdbc:mysql://localhost:3306/your_database userIdyour_username passwordyour_password /jdbcConnection javaModelGenerator targetPackagecom.example.model targetProjectsrc/main/java property nameenableSubPackages valuetrue/ property nametrimStrings valuetrue/ /javaModelGenerator sqlMapGenerator targetPackagecom.example.mapper targetProjectsrc/main/resources property nameenableSubPackages valuetrue/ /sqlMapGenerator javaClientGenerator typeXMLMAPPER targetPackagecom.example.mapper targetProjectsrc/main/java property nameenableSubPackages valuetrue/ /javaClientGenerator !-- 指定要生成的表可以使用通配符 % -- table tableNameuser domainObjectNameUser !-- 可选的列级配置例如忽略某些字段 -- !-- columnOverride columncreated_time javaTypejava.time.LocalDateTime/ -- /table table tableNameorder domainObjectNameOrder/ /context /generatorConfiguration3.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 类 (enableCountByExamplefalse)。5. 高级特性与自定义5.1 使用插件 (Plugin)MBG 支持插件机制可以干预代码生成过程。例如官方提供的LombokPlugin可以为实体类生成 Lombok 注解从而省略 Getter/Setter 方法。context ... plugin typeorg.mybatis.generator.plugins.LombokPlugin property namedata valuetrue/ !-- 生成 Data 注解 -- /plugin ... /context5.2 自定义注释生成器通过实现CommentGenerator接口可以自定义实体类字段、方法以及 XML 文件中的注释内容。5.3 生成 Example 类当targetRuntime设置为MyBatis3时默认会为每个表生成一个 Example 类用于构建复杂的动态查询条件如andNameLike。如果不需要可以在table中配置enableCountByExamplefalse enableUpdateByExamplefalse enableDeleteByExamplefalse enableSelectByExamplefalse来禁用。6. 注意事项与最佳实践配置文件版本管理将generatorConfig.xml纳入版本控制便于团队共享和复现。生成文件覆盖配置overwritetrue/overwrite时要谨慎避免覆盖手动修改过的代码。建议将生成的代码与业务代码分离。数据库驱动兼容性确保插件依赖的数据库驱动版本与项目运行时使用的版本一致。增量生成MBG 不会删除已生成的文件。当表结构变更如删除字段时需要手动清理旧的实体类字段或重新生成全部文件。结合 Lombok 使用强烈推荐使用 Lombok 插件可以极大简化实体类使代码更简洁。7. 总结MyBatis Generator 是 MyBatis 生态中提升开发效率的利器。通过简单的 XML 配置即可自动化生成数据访问层的基础代码让开发者更专注于业务逻辑的实现。掌握其配置方法和高级特性能够根据项目需求进行灵活定制是 Java 后端开发者必备的技能之一。