mybatis generator插件(手把手讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Java Web 开发中,数据库操作是核心任务之一。传统的 MyBatis 使用方式要求开发者手动编写大量重复代码,包括实体类、SQL 映射文件和 DAO 接口,这不仅耗时,还容易出错。MyBatis Generator 插件(以下简称 MBG)的出现,完美解决了这一痛点。它通过逆向工程(Reverse Engineering),根据数据库表结构自动生成代码,极大提升了开发效率。本文将从零开始讲解 MBG 的核心概念、配置方法和实际应用,帮助开发者快速掌握这一工具。


什么是 MyBatis Generator 插件?

MyBatis Generator 插件是一个基于数据库表结构生成 MyBatis 相关代码的开源工具。它的核心功能是根据用户定义的配置文件,自动生成以下内容:

  • 实体类(POJO):对应数据库表的字段
  • SQL 映射文件(XML):包含 CRUD 操作的 SQL 语句
  • DAO 接口:提供数据访问的方法

形象地说,MBG 就像一个“代码工厂”:你只需告诉它数据库的结构,它就能像流水线一样,快速产出高质量的代码。这对于需要频繁操作数据库的项目(如用户管理、订单系统等),是不可多得的效率工具。


环境准备与快速入门

1. 安装与配置

MBG 可通过 Maven 或 Gradle 插件集成到项目中。以下以 Maven 为例:

1.1 添加依赖

pom.xml 中添加以下依赖:

<dependency>  
  <groupId>org.mybatis.generator</groupId>  
  <artifactId>mybatis-generator-core</artifactId>  
  <version>1.4.2</version>  
</dependency>  

1.2 创建配置文件

在项目根目录下新建 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="mysql" targetRuntime="MyBatis3">  
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"  
                   connectionURL="jdbc:mysql://localhost:3306/mydb?useSSL=false"  
                   userId="root"  
                   password="root"/>  

    <!-- 生成代码的目标目录 -->  
    <javaModelGenerator targetPackage="com.example.model"  
                        targetProject="src/main/java"/>  

    <sqlMapGenerator targetPackage="mapper"  
                     targetProject="src/main/resources"/>  

    <javaClientGenerator type="XMLMAPPER"  
                         targetPackage="com.example.dao"  
                         targetProject="src/main/java"/>  

    <!-- 需要生成的表 -->  
    <table tableName="user" domainObjectplural="User"/>  
  </context>  
</generatorConfiguration>  

1.3 运行插件

通过 Maven 插件运行生成代码:

mvn mybatis-generator:generate  

核心概念与配置详解

2.1 逆向工程原理

MBG 的核心逻辑是“逆向工程”,即从数据库的物理结构(如表、字段、索引)反向推导出程序代码。这一过程分为三个步骤:

  1. 数据库连接:通过 JDBC 获取表结构信息。
  2. 代码生成:根据配置生成实体类、映射文件和 DAO 接口。
  3. 输出文件:将生成的代码写入指定的目录。

2.2 配置文件关键节点

generatorConfig.xml 中,<context> 是配置的核心容器,其下包含多个子节点:

节点名称作用描述
<jdbcConnection>定义数据库连接参数(驱动类、URL、用户名、密码)。
<javaModelGenerator>指定实体类的生成路径和包名。
<sqlMapGenerator>指定 SQL 映射文件的生成路径和包名。
<javaClientGenerator>指定 DAO 接口的生成路径和包名,type="XMLMAPPER" 表示使用 XML 配置。
<table>定义需要生成代码的表名及实体类名(domainObjectName)。

2.3 关键配置参数

以下参数对生成代码的行为有重要影响:

  • targetRuntime:指定 MyBatis 版本(如 MyBatis3MyBatis3Simple)。
  • enableCountByExample:是否生成 countByExample 方法。
  • trimStrings:是否自动去除字符串字段的前后空格。

实战案例:生成用户管理模块

3.1 数据库设计

假设我们有一张 user 表,结构如下:

CREATE TABLE `user` (  
  `id` INT PRIMARY KEY AUTO_INCREMENT,  
  `name` VARCHAR(50) NOT NULL,  
  `email` VARCHAR(100) UNIQUE,  
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP  
);  

3.2 生成代码

运行 MBG 后,会自动生成以下文件:

3.2.1 实体类 User.java

public class User {  
  private Integer id;  
  private String name;  
  private String email;  
  private Timestamp createdAt;  
  // Getter 和 Setter 方法  
}  

3.2.2 映射文件 UserMapper.xml

<mapper namespace="com.example.dao.UserMapper">  
  <select id="selectByPrimaryKey" resultType="User">  
    SELECT * FROM user WHERE id = #{id}  
  </select>  
  <!-- 其他 CRUD 语句 -->  
</mapper>  

3.2.3 DAO 接口 UserMapper.java

public interface UserMapper {  
  User selectByPrimaryKey(Integer id);  
  int insert(User record);  
  // 其他方法声明  
}  

3.3 代码优化与扩展

MBG 生成的代码是基础框架,开发者可以根据需求进行扩展:

  • 自定义 SQL:在 XML 文件中添加复杂查询。
  • 继承接口:通过接口继承实现通用 CRUD 方法。
  • 注解替代 XML:将 <javaClientGenerator type="ANNOTATED">,生成注解风格的 DAO 接口。

高级配置与技巧

4.1 忽略字段与重命名

若表中存在特殊字段(如 created_at 需要映射为驼峰命名 createdAt),可通过 <columnOverride> 配置:

<table tableName="user" domainObjectName="User">  
  <columnOverride column="created_at"  
                 property="createdAt"  
                 jdbcType="TIMESTAMP"/>  
</table>  

4.2 全局唯一标识符(GUID)

对于需要自定义主键的场景(如 UUID),可在 <generatedKey> 中指定:

<table tableName="order" domainObjectName="Order">  
  <generatedKey column="id"  
               sqlStatement="SELECT UUID()"/>  
</table>  

4.3 排除特定表或列

使用 excludeTablesexcludeColumns 属性过滤不需要的表或字段:

<context...>  
  <table tableName="%" excludeTables="logs,history"/>  
</context>  

常见问题与解决方案

5.1 生成代码后出现错误

问题:生成的代码无法编译,提示字段类型不匹配。
原因:数据库字段类型与 Java 类型映射不一致(如 DECIMAL 对应 BigDecimal)。
解决方案:在 <columnOverride> 中显式指定 javaType

<columnOverride column="price" javaType="java.math.BigDecimal"/>  

5.2 配置文件语法错误

问题:运行 MBG 时提示 Error parsing XML
原因:XML 文件缺少必要的 DTD 声明或标签嵌套错误。
解决方案:检查配置文件的根节点是否为 <generatorConfiguration>,并确保所有标签闭合。

5.3 性能优化

若项目包含大量表,可启用 mergeByExample 等参数减少冗余查询:

<context...>  
  <property name="useActualColumnNames" value="false"/>  
  <property name="useLegacyRuntime" value="false"/>  
</context>  

结论

MyBatis Generator 插件通过自动化生成代码,显著降低了 MyBatis 项目的开发成本。它不仅减少了重复劳动,还能确保代码规范一致,是团队协作的利器。对于初学者而言,MBG 是快速上手 MyBatis 的跳板;对于中级开发者,掌握其高级配置则能进一步提升开发效率。

未来,随着项目需求变化,建议结合 MBG 的增量生成功能(overwrite 参数)和版本控制工具(如 Git),实现代码的灵活维护。此外,可进一步探索 MBG 的插件扩展机制,根据业务场景定制生成逻辑,让自动化工具真正服务于开发需求。

希望本文能帮助你高效利用 mybatis generator插件,在 Java 后端开发中事半功倍!

最新发布