继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

解放双手!MyBatis Generator 超详细使用指南

王家大少
关注TA
已关注
手记 43
粉丝 27
获赞 81

在日常的 Java 开发工作中,基于 MyBatis 框架进行数据库操作时,我们需要手动编写大量的实体类、Mapper 接口和 Mapper XML 文件。这些代码重复性高、编写繁琐,不仅耗费时间,还容易出现拼写错误。

MyBatis Generator(MBG) 就是为解决这个痛点而生的工具。它是一个官方提供的 Maven 插件,能够根据数据库表结构,自动生成对应的实体类、Mapper 接口和 Mapper XML 文件,极大提升开发效率。

本文将从 MBG 的核心优势、环境配置、实战使用到高级技巧,全方位带你玩转这款神器。

一、MyBatis Generator 核心优势

  1. 高效省時:自动生成实体类、Mapper 接口、XML 映射文件,告别重复编码
  2. 灵活配置:支持自定义生成规则,可指定生成表、字段过滤、包路径等
  3. 无缝集成:作为 Maven 插件,可直接集成到项目构建流程中
  4. 低侵入性:生成的代码符合 MyBatis 规范,可在此基础上灵活扩展
  5. 多版本兼容:支持 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.xmlbuild 标签下添加 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&amp;characterEncoding=utf8&amp;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 工具栏

  1. 打开 IDEA 右侧的 Maven 面板
  2. 展开你的项目 → Pluginsmybatis-generator
  3. 双击 mybatis-generator:generate 执行插件

方式2:使用命令行执行

在项目根目录下执行以下 Maven 命令:

mvn mybatis-generator:generate

执行成功后,你会在指定的包路径下看到自动生成的三类文件:

  • entities/Pay.java:数据库表对应的实体类
  • mapper/PayMapper.java:Mapper 接口
  • resources/mapper/PayMapper.xml:Mapper XML 映射文件

四、常见问题与解决方案

问题1:生成的代码注释乱码

原因:数据库字符集与 MBG 编码不统一。
解决方案

  1. 确保 MySQL 数据库、表、字段的字符集为 utf8
  2. generatorConfig.xml 中添加 javaFileEncodingremarksReporting 配置
  3. 确保 JDBC URL 包含 useUnicode=true&characterEncoding=utf8 参数

问题2:生成的文件覆盖不了旧文件

解决方案
pom.xml 的插件配置中,设置 <overwrite>true</overwrite>

问题3:提示“找不到数据库驱动”

解决方案
在 MBG 插件的 dependencies 中添加数据库驱动依赖,确保版本与项目一致。

问题4:MySQL 8.x 连接报错

解决方案

  1. 驱动类改为 com.mysql.cj.jdbc.Driver
  2. JDBC URL 添加 serverTimezone=GMT%2B8 参数
  3. 数据库驱动版本升级为 8.x

五、高级技巧

1. 过滤不需要生成的字段

table 节点中添加 columnOverrideignoreColumn 标签,可过滤指定字段:

<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 的配置和使用,不仅能提升开发效率,还能规范代码结构。结合数据库字符集配置、编码统一等细节处理,可彻底解决生成代码过程中的各种坑点,真正实现“一键生成,开箱即用”。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP