MyBatis Generator 核心配置文件 generatorConfig.xml 完整配置项说明
MyBatis Generator(MBG)的generatorConfig.xml是代码生成的核心配置文件,遵循 MyBatis 官方 DTD 约束,根标签为<generatorConfiguration>,所有配置均嵌套在该标签下,默认仅生成 Entity、Mapper 接口、Mapper XML,下文按「核心根标签 - 一级核心标签 - 二级子标签」的层级,详细说明所有常用配置项的作用、属性及使用规范,同时标注核心必配项和自定义扩展项。
一、根标签:<generatorConfiguration>
所有 MBG 配置的顶层根标签 ,无任何属性,是整个配置文件的容器,所有其他标签(如<classPathEntry>、<context>)均为其子标签,是配置文件的基础骨架。
二、一级核心标签(根标签直接子标签)
1. <classPathEntry>:数据库驱动包路径配置(必配)
作用 :指定数据库驱动的本地绝对路径,MBG 通过该路径加载数据库驱动类,实现与数据库的连接,无此配置会导致数据库连接失败 。核心属性:
location:必填,数据库驱动 JAR 包的本地绝对路径 (可从 Maven 仓库复制,如 MySQL8.0 驱动路径);示例:
xml
<classPathEntry location="C:\Users\username\.m2\repository\mysql\mysql-connector-java\8.0.33\mysql-connector-java-8.0.33.jar"/>
2. <context>:生成规则上下文(核心必配,可多个)
作用 :定义一套完整的代码生成规则,包含数据库连接、生成策略、包路径、表映射等所有核心配置,一个配置文件可配置多个<context>(适配多数据库 / 多生成规则),至少配置 1 个 。核心属性:
id:必填,上下文唯一标识(自定义,如MySQL、Oracle_Prod),用于区分不同生成规则;targetRuntime:必填,指定生成代码适配的 MyBatis 版本,常用值:MyBatis3:推荐,生成完整的 CRUD 方法(含selectByPrimaryKey、insertSelective等);MyBatis3Simple:生成简化版 CRUD,仅基础增删改查;
defaultModelType:可选,实体类生成模式,推荐flat(扁平化模式),生成单表对应单个实体类,无嵌套子类,适配绝大多数场景;示例:
xml
<context id="MySQL" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 所有子配置均嵌套在此 -->
</context>
三、<context> 核心子标签(按配置优先级排序)
1. <commentGenerator>:注释生成器配置(可选)
作用 :控制生成代码中的注释规则,可关闭自动生成的时间、作者、表说明等注释,让代码更简洁。核心子标签 :<property>,通过name-value配置注释规则,常用属性:
suppressAllComments:值true/false,是否关闭所有注释 ,推荐true;suppressDate:值true/false,是否关闭日期注释(即使不关闭所有注释,也建议关闭日期,避免每次生成刷新时间);addRemarkComments:值true/false,是否将数据库表 / 字段的备注信息 生成到注释中,需数据库表提前配置备注;示例:
xml
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
2. <jdbcConnection>:数据库连接配置(核心必配)
作用 :配置数据库连接信息,MBG 通过该配置连接数据库,读取表结构生成对应代码,属性需与数据库实际环境完全匹配 。核心属性:
driverClass:必填,数据库驱动类全限定名(不可写错):- MySQL8.0+:
com.mysql.cj.jdbc.Driver(需指定时区); - MySQL5.x:
com.mysql.jdbc.Driver; - Oracle:
oracle.jdbc.driver.OracleDriver; - PostgreSQL:
org.postgresql.Driver;
- MySQL8.0+:
connectionURL:必填,数据库连接 URL,包含地址、端口、库名、连接参数;userId:必填,数据库登录用户名;password:必填,数据库登录密码;MySQL8.0 + 示例(含 UTF-8 编码、时区、关闭 SSL):
xml
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"
userId="root"
password="123456">
</jdbcConnection>
3. 代码生成器三剑客(Entity/Mapper/XML,核心必配)
这三个标签是 MBG默认核心生成器 ,分别控制实体类、Mapper 接口、Mapper XML 文件的生成路径和规则,三者配合生成数据访问层基础代码,缺一不可。
(1)<javaModelGenerator>:实体类(Entity)生成配置
作用 :指定生成的实体类的包路径 和本地生成目录 ,并配置实体类的生成规则。核心属性:
targetPackage:必填,实体类的包名(如com.demo.entity),生成后会自动按包名创建多级目录;targetProject:必填,生成文件的根目录(Maven 项目默认src/main/java);常用子标签 :<property>enableSubPackages:值true/false,是否按数据库表名自动分包 ,推荐true(如多表时按模块分包);trimStrings:值true/false,是否自动修剪字符串类型字段的前后空格,推荐true;示例:
xml
<javaModelGenerator targetPackage="com.demo.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
(2)<sqlMapGenerator>:Mapper XML 文件生成配置
作用 :指定生成的 Mapper XML 映射文件的包路径 和本地生成目录 ,XML 中包含 SQL 语句和结果集映射。核心属性:
targetPackage:必填,XML 文件的包名(Maven 项目推荐mapper,生成在resources下);targetProject:必填,XML 文件根目录(Maven 项目默认src/main/resources);常用子标签 :<property name="enableSubPackages" value="true"/>(按表自动分包);示例:
xml
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
(3)<javaClientGenerator>:Mapper 接口生成配置
作用 :指定生成的 Mapper 接口的包路径 、本地生成目录 和生成类型 ,接口与 XML 文件一一对应。核心属性:
type:必填,Mapper 接口生成类型,推荐XMLMAPPER(接口与 XML 分离,符合 MyBatis 最佳实践);targetPackage:必填,Mapper 接口的包名(如com.demo.mapper);targetProject:必填,接口根目录(Maven 项目默认src/main/java);常用子标签 :<property name="enableSubPackages" value="true"/>(按表自动分包);示例:
xml
<javaClientGenerator type="XMLMAPPER" targetPackage="com.demo.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
4. <table>:数据库表映射配置(核心必配,可多个)
作用 :指定需要生成代码的数据库表 ,并配置表与实体类的映射规则,一个<table>对应一张表 ,可配置多个。核心属性:
tableName:必填,数据库中真实的表名 / 视图名 (需与数据库一致,支持通配符%,如user_%匹配所有以user_开头的表);domainObjectName:可选,生成的实体类名 (自定义驼峰命名,如tableName="sys_user"对应domainObjectName="SysUser");- 若不配置,MBG 会自动将表名转为驼峰命名(如
sys_user→SysUser);常用子标签 :<property>(表级生成规则)
- 若不配置,MBG 会自动将表名转为驼峰命名(如
useActualColumnNames:值true/false,是否使用数据库原始字段名 作为实体属性名,默认false(自动将下划线字段转为驼峰,如user_name→userName),推荐保持默认;示例(单表 + 通配符表):
xml
<!-- 单表配置:指定表名和实体类名 -->
<table tableName="sys_user" domainObjectName="SysUser"/>
<!-- 通配符配置:匹配所有sys_开头的表,自动生成实体类名 -->
<table tableName="sys_%"/>
5. 自定义扩展标签(非 MBG 默认,Controller/Service 生成用)
这两个标签是自定义扩展配置(需配合自定义生成器和 Velocity 模板使用),用于实现 Controller、Service、ServiceImpl 的自动生成,是对 MBG 默认功能的扩展。
(1)<javaGenerator>:自定义 Java 类生成路径配置
作用 :指定 Controller/Service/ServiceImpl 等自定义类的包路径 和生成目录 ,通过type标识生成类型。核心属性:
type:自定义类型标识(如CONTROLLER/SERVICE/SERVICE_IMPL),需与模板配置一一对应;targetPackage:自定义类的包名(如com.demo.controller);targetProject:自定义类根目录(Maven 项目默认src/main/java);示例:
xml
<javaGenerator targetPackage="com.demo.controller" targetProject="src/main/java" type="CONTROLLER"/>
<javaGenerator targetPackage="com.demo.service" targetProject="src/main/java" type="SERVICE"/>
(2)<templateConfiguration>:自定义模板配置
作用 :指定自定义类对应的Velocity/FreeMarker 模板路径 ,MBG(或自定义生成器)通过模板渲染生成代码,同时可保留 MBG 默认模板。核心属性:
type:模板类型,与<javaGenerator>的type(自定义)或 MBG 默认类型(MODEL/MAPPER/SQLMAP)一致;location:模板文件路径(支持相对路径 / 绝对路径,如自定义模板src/main/resources/template/controller.vm);示例:
xml
<!-- 自定义模板:Controller/Service -->
<templateConfiguration type="CONTROLLER" location="src/main/resources/template/controller.vm"/>
<!-- 保留MBG默认模板:Entity/Mapper -->
<templateConfiguration type="MODEL" location="org/mybatis/generator/templates/model.vm"/>
四、核心配置项速查(必配 / 可选 / 自定义)
| 标签 | 核心作用 | 配置类型 | 关键属性 |
|---|---|---|---|
<classPathEntry> |
配置数据库驱动路径 | 必配 | location(绝对路径) |
<context> |
生成规则上下文 | 必配 | id/targetRuntime/defaultModelType |
<jdbcConnection> |
数据库连接信息 | 必配 | driverClass/connectionURL/userId/password |
<javaModelGenerator> |
实体类生成配置 | 必配 | targetPackage/targetProject |
<sqlMapGenerator> |
Mapper XML 生成配置 | 必配 | targetPackage/targetProject |
<javaClientGenerator> |
Mapper 接口生成配置 | 必配 | type=XMLMAPPER/targetPackage |
<table> |
数据库表映射 | 必配 | tableName/domainObjectName |
<commentGenerator> |
控制注释生成 | 可选 | suppressAllComments/suppressDate |
<javaGenerator> |
自定义类生成路径(Controller/Service) | 自定义 | type/targetPackage |
<templateConfiguration> |
自定义模板路径 | 自定义 | type/location |
五、配置关键注意事项
- 路径统一 :所有
targetProject需与 Maven/Gradle 项目目录一致(如 Java 类src/main/java,资源文件src/main/resources),避免生成文件到错误目录; - 包名规范 :
targetPackage需遵循 Java 包名规范(小写 + 点分隔),生成后会自动创建多级目录,无需手动创建; - 驱动匹配 :
driverClass和classPathEntry的驱动包版本必须一致(如 MySQL8.0 + 驱动对应com.mysql.cj.jdbc.Driver); - URL 参数 :MySQL8.0 + 的
connectionURL必须指定serverTimezone(如GMT+8),否则会报时区异常; - 避免覆盖 :若手动修改过生成的代码,建议在自定义生成器中设置
overwrite=false,避免重新生成时覆盖手动修改的内容; - 主键要求 :MBG 默认生成的
selectByPrimaryKey、deleteByPrimaryKey等方法依赖数据库表主键,需确保配置的表已设置主键,否则相关方法生成失败。
六、完整最小化可运行配置示例(仅生成 Entity/Mapper/XML)
以下是剔除自定义扩展的最小化配置,直接修改数据库信息和包名即可运行,适配 Spring Boot + MyBatis 基础项目:
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>
<!-- 数据库驱动包路径(替换为自己的路径) -->
<classPathEntry location="C:\Users\username\.m2\repository\mysql\mysql-connector-java\8.0.33\mysql-connector-java-8.0.33.jar"/>
<context id="MySQL" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- 关闭所有注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库连接配置(替换为自己的数据库信息) -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/demo_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"
userId="root"
password="123456">
</jdbcConnection>
<!-- 实体类生成 -->
<javaModelGenerator targetPackage="com.demo.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>
<!-- Mapper XML生成 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- Mapper 接口生成 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.demo.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 生成代码的表(替换为自己的表名) -->
<table tableName="sys_user" domainObjectName="SysUser"/>
<table tableName="sys_menu"/>
</context>
</generatorConfiguration>
以上配置项覆盖了generatorConfig.xml的所有核心场景,包括 MBG 默认基础配置和 Controller/Service 自定义扩展配置,只需根据项目实际环境(数据库类型、包名、表名)修改对应属性,即可快速实现代码自动生成。