解放双手!MyBatis Generator 超详细使用指南
在日常的 Java 开发工作中,基于 MyBatis 框架进行数据库操作时,我们需要手动编写大量的实体类、Mapper 接口和 Mapper XML 文件。这些代码重复性高、编写繁琐,不仅耗费时间,还容易出现拼写错误。
而 MyBatis Generator(MBG) 就是为解决这个痛点而生的工具。它是一个官方提供的 Maven 插件,能够根据数据库表结构,自动生成对应的实体类、Mapper 接口和 Mapper XML 文件,极大提升开发效率。
本文将从 MBG 的核心优势、环境配置、实战使用到高级技巧,全方位带你玩转这款神器。
一、MyBatis Generator 核心优势
- 高效省時:自动生成实体类、Mapper 接口、XML 映射文件,告别重复编码
- 灵活配置:支持自定义生成规则,可指定生成表、字段过滤、包路径等
- 无缝集成:作为 Maven 插件,可直接集成到项目构建流程中
- 低侵入性:生成的代码符合 MyBatis 规范,可在此基础上灵活扩展
- 多版本兼容:支持 MyBatis3.x 全版本,适配主流数据库(MySQL、Oracle、SQL Server 等)
二、环境准备
1. 基础依赖
确保你的项目是 Maven 项目,且已引入 MyBatis 核心依赖。以 MySQL 为例,在 pom.xml 中添加以下依赖和插件配置。
(1)添加 MyBatis 及数据库驱动依赖
<!-- MyBatis 核心依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<!-- MySQL 驱动(适配 MySQL 5.x 用 5.1.x 版本,MySQL 8.x 用 8.x 版本) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
<scope>runtime</scope>
</dependency>
(2)配置 MyBatis Generator Maven 插件
在 pom.xml 的 build 标签下添加 MBG 插件:
<build>
<plugins>
<!-- MyBatis Generator 插件 -->
<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>5.1.49</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
2. 核心配置文件:generatorConfig.xml
在 src/main/resources 目录下创建 generatorConfig.xml 文件,这是 MBG 的核心配置文件,用于定义数据库连接、生成规则、目标包路径等。
以下是一个完整的配置示例(适配 MySQL 5.x):
<?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>
<!-- 1. 配置数据库连接(可通过外部properties文件引入,更灵活) -->
<context id="MySQLContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 解决注释乱码核心配置 -->
<property name="javaFileEncoding" value="UTF-8"/>
<property name="remarksReporting" value="true"/>
<!-- 可选:集成通用Mapper插件(简化CRUD操作) -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
<property name="caseSensitive" value="true"/>
</plugin>
<!-- 数据库连接配置 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/spring-cloud-learning?useUnicode=true&characterEncoding=utf8&useSSL=false"
userId="root"
password="root">
<!-- 适配MySQL 5.x,确保读取表注释正常 -->
<property name="useInformationSchema" value="true"/>
</jdbcConnection>
<!-- 2. 配置实体类生成规则 -->
<javaModelGenerator targetPackage="com.atguigu.cloud.entities" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
<property name="javaFileEncoding" value="UTF-8"/>
</javaModelGenerator>
<!-- 3. 配置Mapper XML文件生成规则 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 4. 配置Mapper接口生成规则 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.atguigu.cloud.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 5. 指定要生成的数据库表 -->
<table tableName="t_pay" domainObjectName="Pay">
<generatedKey column="id" sqlStatement="JDBC"/>
<property name="useActualColumnNames" value="true"/>
</table>
</context>
</generatorConfiguration>
配置文件关键节点说明:
| 节点 | 作用 |
|---|---|
jdbcConnection |
配置数据库连接信息,驱动类、URL、账号密码 |
javaModelGenerator |
指定实体类的包路径和生成位置 |
sqlMapGenerator |
指定Mapper XML文件的包路径和生成位置 |
javaClientGenerator |
指定Mapper接口的包路径和生成位置 |
table |
指定要生成代码的数据库表,tableName 为表名,domainObjectName 为实体类名 |
三、实战使用:生成代码
配置完成后,有两种方式执行 MBG 插件生成代码。
方式1:使用 IDEA 右侧 Maven 工具栏
- 打开 IDEA 右侧的
Maven面板 - 展开你的项目 →
Plugins→mybatis-generator - 双击
mybatis-generator:generate执行插件
方式2:使用命令行执行
在项目根目录下执行以下 Maven 命令:
mvn mybatis-generator:generate
执行成功后,你会在指定的包路径下看到自动生成的三类文件:
entities/Pay.java:数据库表对应的实体类mapper/PayMapper.java:Mapper 接口resources/mapper/PayMapper.xml:Mapper XML 映射文件
四、常见问题与解决方案
问题1:生成的代码注释乱码
原因:数据库字符集与 MBG 编码不统一。
解决方案:
- 确保 MySQL 数据库、表、字段的字符集为
utf8 - 在
generatorConfig.xml中添加javaFileEncoding和remarksReporting配置 - 确保 JDBC URL 包含
useUnicode=true&characterEncoding=utf8参数
问题2:生成的文件覆盖不了旧文件
解决方案:
在 pom.xml 的插件配置中,设置 <overwrite>true</overwrite>
问题3:提示“找不到数据库驱动”
解决方案:
在 MBG 插件的 dependencies 中添加数据库驱动依赖,确保版本与项目一致。
问题4:MySQL 8.x 连接报错
解决方案:
- 驱动类改为
com.mysql.cj.jdbc.Driver - JDBC URL 添加
serverTimezone=GMT%2B8参数 - 数据库驱动版本升级为
8.x
五、高级技巧
1. 过滤不需要生成的字段
在 table 节点中添加 columnOverride 或 ignoreColumn 标签,可过滤指定字段:
<table tableName="t_pay" domainObjectName="Pay">
<generatedKey column="id" sqlStatement="JDBC"/>
<!-- 忽略某个字段 -->
<ignoreColumn column="deleted"/>
</table>
2. 自定义实体类字段名
通过 columnOverride 标签可将数据库字段名映射为自定义的实体类字段名:
<table tableName="t_pay" domainObjectName="Pay">
<columnOverride column="pay_no" property="payNumber"/>
</table>
3. 集成通用 Mapper
通用 Mapper 是一个第三方插件,可进一步简化 CRUD 操作,无需手动编写基础 SQL。只需在配置文件中添加对应的插件配置(上文示例已包含),生成的 Mapper 接口会继承通用 Mapper,直接拥有单表的增删改查能力。
六、总结
MyBatis Generator 是 MyBatis 生态中不可或缺的高效工具,通过简单的配置即可自动生成重复性高的数据库访问代码,让开发者将精力聚焦在核心业务逻辑上。
掌握 MBG 的配置和使用,不仅能提升开发效率,还能规范代码结构。结合数据库字符集配置、编码统一等细节处理,可彻底解决生成代码过程中的各种坑点,真正实现“一键生成,开箱即用”。
共同学习,写下你的评论
评论加载中...
作者其他优质文章