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 的核心逻辑是“逆向工程”,即从数据库的物理结构(如表、字段、索引)反向推导出程序代码。这一过程分为三个步骤:
- 数据库连接:通过 JDBC 获取表结构信息。
- 代码生成:根据配置生成实体类、映射文件和 DAO 接口。
- 输出文件:将生成的代码写入指定的目录。
2.2 配置文件关键节点
在 generatorConfig.xml
中,<context>
是配置的核心容器,其下包含多个子节点:
节点名称 | 作用描述 |
---|---|
<jdbcConnection> | 定义数据库连接参数(驱动类、URL、用户名、密码)。 |
<javaModelGenerator> | 指定实体类的生成路径和包名。 |
<sqlMapGenerator> | 指定 SQL 映射文件的生成路径和包名。 |
<javaClientGenerator> | 指定 DAO 接口的生成路径和包名,type="XMLMAPPER" 表示使用 XML 配置。 |
<table> | 定义需要生成代码的表名及实体类名(domainObjectName )。 |
2.3 关键配置参数
以下参数对生成代码的行为有重要影响:
- targetRuntime:指定 MyBatis 版本(如
MyBatis3
或MyBatis3Simple
)。 - 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 排除特定表或列
使用 excludeTables
或 excludeColumns
属性过滤不需要的表或字段:
<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 后端开发中事半功倍!