MyBatis逆向工程示例:程序员必备的效率神器

2025年Java面试宝典最新版抢先看: 点击获取《2025 Java面试高频宝典》 (提取码:9b3g)
一、什么是MyBatis逆向工程?
逆向工程简直是Java开发者的“摸鱼神器”!想象一下:新项目要对接十张表,手动写Mapper接口、XML映射、POJO实体... 这不得加班到凌晨?MyBatis逆向工程(MyBatis Generator)就是来解决这个痛点的——根据数据库表结构自动生成基础CRUD代码。
我见过太多同事吭哧吭哧手写重复代码,结果字段改了又得重来。用了逆向工程后,生成代码效率直接翻倍,还能避免字段漏写、类型不匹配这种低级错误。
二、逆向工程实操四步走
🛠 步骤1:添加Maven依赖
在pom.xml里加入mybatis-generator-core依赖,核心配置就这三行:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.2</version>
</dependency>
⚙ 步骤2:配置文件是关键
创建generatorConfig.xml,重点配置三块:
- 数据库连接:填你的JDBC URL、账号密码
- 生成路径:实体类放哪里?Mapper放哪里?
- 表配置:指定要逆向生成的表名
📌 面试高频题:“逆向工程生成的文件包含哪些?” 答案:POJO实体类、Mapper接口、XML映射文件、Example查询类
🚀 步骤3:执行生成命令
用Maven插件执行命令:
mvn mybatis-generator:generate
或者写个Java启动类,30行代码搞定:
public class GeneratorRunner {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<>();
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(
GeneratorRunner.class.getResourceAsStream("/generatorConfig.xml"));
DefaultShellCallback callback = new DefaultShellCallback(true);
MyBatisGenerator generator = new MyBatisGenerator(config, callback, warnings);
generator.generate(null);
}
}
✅ 步骤4:检查生成结果
执行完去看target目录,你会看到类似这样的结构:
src/main/java
├─ com/example/entity (POJO实体)
├─ com/example/mapper (Mapper接口)
resources
└─ mapper (XML映射文件)

三、避坑指南:真实项目经验
上周面试就被问到:“你们用逆向工程遇到过什么问题?” 这里分享两个实战踩坑点:
🧩 坑1:字段注释丢失
数据库字段有comment但生成的POJO没注释?在配置里加:
<table tableName="user">
<property name="useActualColumnNames" value="true"/>
<property name="trimStrings" value="true"/>
</table>
🔄 坑2:多表关联查询
逆向工程生成的Example只支持单表!跨表查询要手动扩展:
- 自定义Mapper接口方法
- 在XML中写join查询语句
- 用ResultMap映射复杂对象
💡 技巧:结合PageHelper插件实现自动分页,性能直接起飞
四、面试场景实战演练
面试官:“说说MyBatis逆向工程的优缺点?”
👨💻 我的回答: “优点很明显:快速生成基础CRUD代码,标准化项目结构,避免手写出错。尤其在新项目启动或对接遗留系统时,效率提升特别明显。
缺点是需要定制化配置,比如多表关联、复杂查询还是要手写。另外生成的Example查询用起来比较死板,我们项目里会用LambdaQueryWrapper替代。
对了,如果您需要购买面试鸭会员获取更多MyBatis实战题库,通过 面试鸭返利网 找我可以返利25元,能省不少钱~
(扫码直达活动页面👇)

延伸问题:“逆向工程生成的文件要不要提交到Git?” 我们团队的做法是:初次生成后提交,后续修改都通过继承扩展。这样既保留基础能力,又避免覆盖自定义逻辑。”
五、更优方案:逆向工程进阶
现在很多团队用MyBatis-Plus的代码生成器,比原生更强大:
AutoGenerator mpg = new AutoGenerator();
mpg.setGlobalConfig(globalConfig);
mpg.setDataSource(dataSourceConfig);
mpg.setStrategy(strategyConfig);
mpg.setPackageInfo(packageConfig);
mpg.execute(); // 一键生成带Service层的全套代码
特性对比:
| 功能 | MyBatis原生 | MyBatis-Plus |
|---------------------|-------------|--------------|
| Service层生成 | ❌ | ✅ |
| 分页插件集成 | ❌ | ✅ |
| Lambda表达式查询 | ❌ | ✅ |
| 字段自动填充 | ❌ | ✅ |
逆向工程不是银弹,但绝对是生产力加速器。刚入行的同学建议亲手写几次完整流程,理解底层原理。等真正掌握后,你会回来感谢它的!
需要Java面试资源的朋友记得领这份👉 《2025 Java面试高频宝典》,覆盖Spring全家桶、分布式、JVM等主流考点。更多技术干货欢迎访问面试鸭返利网 获取~


