Mapper一键生成
在构建数据访问层时,如果为每张表手动编写 Entity、Mapper 接口及对应的 XML 文件,不仅工作量大,而且容易出错。为提升开发效率与代码一致性,通常会结合使用 MyBatis Generator(MBG) 与 MyBatis 通用 Mapper 来实现Mapper 一键生成与通用 CRUD 操作。
为什么使用 Mapper 自动生成工具?
- 避免重复编写大量样板代码(如实体类、XML 映射、CRUD 方法)。
 - 提升开发效率与项目一致性,减少人为错误。
 - 便于项目快速迭代与维护,尤其在数据库结构频繁变化时。
 - 统一数据访问层规范,确保各模块间结构一致。
 
一键生成工具
MyBatis Generator(MBG)
- 官网:http://mybatis.org/generator/
 - 作用:根据数据库表结构自动生成实体类(Entity)、Mapper 接口及对应的 XML 映射文件。
 - 特点:
 
- 自动生成标准化代码,减少手写 SQL。
 - 可重复执行生成任务以适配数据库变更。
 - 支持自定义模板,灵活性较高。
 适用场景:适合表结构复杂、字段较多、变更频繁的项目,通过自动生成标准化代码快速搭建数据层。
MyBatis 通用 Mapper
- 官网:https://github.com/abel533/Mapper
 - 作用:提供通用的 CRUD 操作接口,无需为每个实体类单独编写 Mapper 方法。
 - 特点:
 
- 继承通用接口即可获得完整的增删改查功能。
 - 支持批量操作、分页查询、条件构造等常用功能。
 - 通常无需 XML 文件,可直接基于注解或内置方法操作数据库。
 适用场景:适用于中小型项目或表结构稳定的场景,能快速实现数据访问层逻辑,减少样板代码。
两者区别对比
特性 MyBatis Generator (MBG) MyBatis 通用 Mapper 主要功能 自动生成实体类、Mapper 接口及 XML 映射文件 提供通用 CRUD 接口,继承即可使用 使用方式 根据数据库表结构运行生成代码 编写少量接口代码即可,无需生成 XML 适用场景 表结构复杂或经常变动的大型项目 表结构稳定、注重开发效率的中小型项目 代码量 生成实体类 + Mapper 接口 + XML 文件,文件数量较多 继承一个通用接口即可,代码量少 可维护性 数据库变动需重新生成文件 通用接口复用性高,变动影响小 
最佳实践
结合使用 MBG + 通用 Mapper 可以实现自动化与通用化的最佳平衡:
- 使用 MBG 自动生成实体类与基础 Mapper 接口;
 - 在生成的 Mapper 接口中 继承通用 Mapper 提供的基础 CRUD 功能;
 - 需要个性化 SQL 时,可在生成的 XML 或接口中扩展自定义方法。
 优势:
- 自动化生成代码,减少重复劳动;
 - 通用接口提供标准化 CRUD,提升复用性;
 - 结合使用可兼顾灵活性与可维护性,适用于 Spring Boot + MyBatis 架构项目。
 
数据库准备
创建数据库
选择
utf8mb4和utf8mb4_unicode_ci编码,因为它支持完整的 Unicode 字符集(包括中文、Emoji 和特殊符号),并且排序和比较遵循 Unicode 标准且大小写不敏感,保证数据库、应用和前端字符一致性,避免乱码问题。
- 执行SQL脚本,生成支付表
 DROP TABLE IF EXISTS `t_pay`; CREATE TABLE `t_pay` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `pay_no` VARCHAR(50) NOT NULL COMMENT '支付流水号', `order_no` VARCHAR(50) NOT NULL COMMENT '订单流水号', `user_id` INT(10) DEFAULT '1' COMMENT '用户账号ID', `amount` DECIMAL(8,2) NOT NULL DEFAULT '9.9' COMMENT '交易金额', `deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='支付交易表'; INSERT INTO t_pay(pay_no,order_no) VALUES('pay17203699','6544bafb424a'); SELECT * FROM t_pay;
创建子模块 mybatis_generator2025
该子模块专门用于自动生成 MyBatis 的实体类、Mapper 接口及 XML 映射文件,实现数据访问层的标准化和自动化,减少手写 SQL 的重复工作,提高开发效率。
新建模块
添加依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.sun.cloud</groupId> <artifactId>cloud2025</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>mybatis_generator2025</artifactId> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!--Mybatis 通用mapper tk单独使用,自己独有+自带版本号--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.19</version> </dependency> <!-- Mybatis Generator 自己独有+自带版本号--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.2</version> </dependency> <!--通用Mapper--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> </dependency> <!--mysql9.2--> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> </dependency> <!--persistence--> <dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> </dependency> <!--hutool--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <resources> <resource> <directory>${basedir}/src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>${basedir}/src/main/resources</directory> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.2.4</version> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.2</version> <configuration> <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> <dependencies> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>9.2.0</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>5.0.0</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
配置文件
- 配置连接参数:在
 src\main\resources路径下新建config.properties#t_pay表包名 package.name=com.sun.cloud # mysql9.2 jdbc.driverClass = com.mysql.cj.jdbc.Driver jdbc.url= jdbc:mysql://localhost:3306/db2025?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true jdbc.user = root jdbc.password =12345678
- 设置输出路径:在
 src\main\resources路径下新建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> <properties resource="config.properties"/> <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat"> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <plugin type="tk.mybatis.mapper.generator.MapperPlugin"> <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/> <property name="caseSensitive" value="true"/> </plugin> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.url}" userId="${jdbc.user}" password="${jdbc.password}"> </jdbcConnection> <javaModelGenerator targetPackage="${package.name}.entities" targetProject="src/main/java"/> <sqlMapGenerator targetPackage="${package.name}.mapper" targetProject="src/main/java"/> <javaClientGenerator targetPackage="${package.name}.mapper" targetProject="src/main/java" type="XMLMAPPER"/> <table tableName="t_pay" domainObjectName="Pay"> <generatedKey column="id" sqlStatement="JDBC"/> </table> </context> </generatorConfiguration>
一键生成
双击插件
mybatis-generator:gererate,一键生成:entity、mapper、xml。




