MyBatis逆向工程是Java开发者提升效率的必备神器,它能根据数据库表结构自动生成Mapper接口、XML映射文件和POJO实体类,大幅减少重复编码工作。通过简单的Maven配置和XML文件设置,开发者可以快速生成基础CRUD代码,避免字段漏写和类型不匹配等低级错误。逆向工程特别适合新项目启动或对接遗留系统,能标准化项目结构,提升开发效率。虽然对多表关联查询支持有限,但结合MyBatis-Plus等工具可以进一步扩展功能。掌握逆向工程能帮助开发者节省大量时间,是Java面试中常见的技术考点,也是提升团队协作效率的重要工具。
2025年Java面试宝典最新版抢先看: 点击获取《2025 Java面试高频宝典》 (提取码:9b3g)
逆向工程简直是Java开发者的“摸鱼神器”!想象一下:新项目要对接十张表,手动写Mapper接口、XML映射、POJO实体... 这不得加班到凌晨?MyBatis逆向工程(MyBatis Generator)就是来解决这个痛点的——根据数据库表结构自动生成基础CRUD代码。
我见过太多同事吭哧吭哧手写重复代码,结果字段改了又得重来。用了逆向工程后,生成代码效率直接翻倍,还能避免字段漏写、类型不匹配这种低级错误。
在pom.xml里加入mybatis-generator-core依赖,核心配置就这三行:
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.2</version>
</dependency>
创建generatorConfig.xml
,重点配置三块:
📌 面试高频题:“逆向工程生成的文件包含哪些?” 答案:POJO实体类、Mapper接口、XML映射文件、Example查询类
用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);
}
}
执行完去看target目录,你会看到类似这样的结构:
src/main/java
├─ com/example/entity (POJO实体)
├─ com/example/mapper (Mapper接口)
resources
└─ mapper (XML映射文件)
上周面试就被问到:“你们用逆向工程遇到过什么问题?” 这里分享两个实战踩坑点:
数据库字段有comment
但生成的POJO没注释?在配置里加:
<table tableName="user">
<property name="useActualColumnNames" value="true"/>
<property name="trimStrings" value="true"/>
</table>
逆向工程生成的Example只支持单表!跨表查询要手动扩展:
💡 技巧:结合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等主流考点。更多技术干货欢迎访问面试鸭返利网 获取~
扫码联系我返利
(当前返利8元,金额随官方实际价格波动,最好提前咨询)
面试鸭小程序码
美团大额优惠券,给自己加个鸡腿吧!
今日有支付宝大红包赶快领,手慢无
支付宝扫码领取1-8元无门槛红包