mybatis 官方推荐 mybatis generator(mbg)作为成熟稳定的代码生成方案,可一键生成 entity、mapper 接口及 xml 映射文件;推荐 maven 插件方式配置,核心为 generatorconfig.xml 中的数据库连接、java 模型与 mapper 生成三段配置,并支持插件增强与 lombok 集成;mybatis-plus 用户可选其内置 generator,以 java api 方式快速生成含 mp 特性的代码。

MyBatis 本身不带内置代码生成器,但官方推荐并广泛使用的 MyBatis Generator(MBG) 是最成熟、稳定、可配置性强的通用代码生成方案。它能根据数据库表结构,一键生成 Entity(POJO)、Mapper 接口、XML 映射文件(含完整 CRUD SQL),甚至支持插件扩展生成 toString、equals、Lombok 注解等。配合 Spring Boot 项目,5 分钟即可搭好数据访问层骨架。
核心依赖与基础配置
在 Maven 项目中引入 MBG 核心依赖和 MySQL 驱动:
- mybatis-generator-core(必需,生成逻辑核心)
- mysql-connector-java(确保版本兼容,如 8.0.33)
- 若用 Maven 插件方式,还需添加 mybatis-generator-maven-plugin
推荐使用 Maven 插件方式:在 pom.xml 的 <build><plugins></plugins></build> 中配置,支持直接执行 mvn mybatis-generator:generate 命令触发生成,无需写 Java 启动类。
关键配置文件 generatorConfig.xml
在 src/main/resources 下创建 generatorConfig.xml,必须包含三部分:
-
数据库连接段:指定 driverClass(如
com.mysql.cj.jdbc.Driver)、connectionURL(含时区参数serverTimezone=Asia/Shanghai)、userId 和 password -
Java 模型生成段:设置
targetPackage(如com.example.demo.entity)、targetProject(通常为src/main/java),开启trimStrings="true"自动去除字符串首尾空格 -
Mapper 生成段:选择
type="XMLMAPPER"生成 XML 文件,或ANNOTATEDMAPPER生成注解版;同时配置sqlMapGenerator指定 XML 存放路径(如src/main/resources/mapper)
注意:<table> 节点可指定 <code>tableName="t_user" 或通配符 tableName="t_% " 批量生成,还可加 enableCountByExample="false" 关闭示例查询方法。
常用增强技巧提升实用性
仅生成基础代码还不够,以下配置让产出更贴近生产需求:
- 启用
ToStringPlugin和SerializablePlugin插件,自动生成toString()和implements Serializable - 在
<commentgenerator></commentgenerator>中设suppressAllComments="true"去除时间戳注释,加addRemarkComments="true"把数据库字段 comment 提取为 JavaDoc - 通过
<javamodelgenerator></javamodelgenerator>的property name="useActualColumnNames" value="false"统一转为驼峰命名(如user_name→userName) - 若项目用 Lombok,可配合自定义模板或插件跳过 getter/setter,只保留
@Data注解(需额外配置)
MyBatis-Plus 用户可选替代方案
如果项目已用 MyBatis-Plus,MyBatis-Plus Generator 是更轻量、API 友好的选择:
- 纯 Java 配置,无需 XML,用
AutoGenerator+StrategyConfig+PackageConfig等对象链式设置 - 默认集成 Freemarker 模板,支持高度自定义模板(如生成 Controller、ServiceImpl、Swagger 注解)
- 对逻辑删除(
is_deleted)、自动填充(gmt_create)等 MP 特性原生识别,生成代码即开箱可用 - 适合 Spring Boot 项目快速初始化,但定制 XML SQL 的灵活性略低于 MBG
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











