请写一篇关于【MyBatis基础教程:Java持久层框架入门】的技术文章
去年十月,北京的秋天冷得特别早。那天晚上十点半,我刚挤完回天通苑的地铁——13号线晚高峰后的“缓刑期”,车厢里终于能站直腰了。掏出手机,看到我妈发来一条微信:“你表弟在老家考上了市里的信息中心,月薪五千五,五险一金全交,还分宿舍。”我盯着屏幕看了三分钟,没回。
那会儿我正为一个线上Bug焦头烂额。项目用的是Spring Boot + MyBatis,结果某个接口突然慢得像蜗牛爬。查了半天,才发现是Mapper里手写SQL时少了个索引提示。凌晨一点改完代码,老婆在微信上问我:“还回不回来?”我说快了,其实心里清楚,明天早上七点又要坐首班车去西二旗。
为什么是我,一个Java程序员,在聊MyBatis?
先自我介绍一下:我,北漂五年,Java后端,月薪22k(税前),房租3500,房贷8600,孩子刚上幼儿园。每天通勤两小时,头发日渐稀疏,但简历不敢停更——因为最近真的在认真考虑要不要回老家发展。
而MyBatis,就是我在这家公司赖以生存的技术栈之一。不是最酷的,不是最时髦的,但它稳、它实、它能让我按时下班(虽然通常做不到)。
技术选型:MyBatis vs Hibernate vs 原生JDBC
很多人第一次接触持久层框架,都会纠结:到底该学哪个?
我刚入行时也踩过坑。第一份工作用的是Hibernate,当时觉得“全自动ORM好高级啊”,结果上线后遇到N+1查询问题,数据库直接被打爆。后来换公司,团队用MyBatis,一开始觉得“怎么还要手写SQL?这不是倒退吗?”
但用久了才明白:MyBatis的“半自动”恰恰是它的优势。
- Hibernate:适合快速开发、模型驱动的项目,但对SQL控制力弱,调优困难。一旦业务复杂,调试起来像在迷宫里找出口。
- 原生JDBC:灵活是灵活,但重复代码多到想哭。
PreparedStatement、ResultSet、连接池管理……写三天就想转行送外卖。 - MyBatis:SQL和代码分离,既保留了灵活性,又通过XML或注解简化了CRUD。你可以清晰地看到每一条SQL,也能轻松优化。
举个真实例子:上周五晚上,产品临时加需求,要在一个千万级用户表里按动态条件分页查询。用Hibernate?光生成HQL就得调试半天。用MyBatis?我直接在XML里写<where> + <if>标签,十分钟搞定,还能加LIMIT防翻车。
MyBatis入门:三步走,别被文档吓到
别被官网那堆配置吓退。其实核心就三点:
定义Mapper接口
public interface UserMapper { User selectById(@Param("id") Long id); List<User> selectByCondition(@Param("name") String name, @Param("age") Integer age); }写XML映射文件(或用注解)
<select id="selectById" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> <select id="selectByCondition" resultType="User"> SELECT * FROM user <where> <if test="name != null">AND name LIKE CONCAT('%', #{name}, '%')</if> <if test="age != null">AND age = #{age}</if> </where> </select>在Service里注入使用
@Service public class UserService { @Autowired private UserMapper userMapper; public User getUser(Long id) { return userMapper.selectById(id); } }
就这么简单。剩下的就是调参、调优、调心态。
为什么现在还在用MyBatis?因为它“接地气”
有人说:“都2024年了,还不上JPA、Spring Data?”
但现实是:大多数国内中大型企业,尤其是金融、政务、电商后台,依然重度依赖MyBatis。原因很简单——可控性。
我们组有个95后实习生,之前在学校主攻Python,来了之后一脸懵:“Java怎么还要写SQL?”我笑他:“你以为Django ORM就能搞定一切?等你遇到复杂报表、多表关联、分库分表,就知道手写SQL的自由有多珍贵。”
而且,MyBatis对简历很友好。你写“熟练使用Spring Boot + MyBatis开发高并发系统”,HR一眼就懂;你写“精通JPA元模型构建”,人家可能以为你是搞学术的。
回老家?技术栈会不会成为障碍?
上周和老婆视频,她问:“要是回去,你这Java+MyBatis的技术,小城市用得上吗?”
我想了想,说:“其实技术不分地域,关键是解决问题的能力。”
老家省会的IT岗位确实不如北京多,但政务云、银行外包、本地电商也在用Spring Cloud + MyBatis这套组合。反倒是那些追新潮、只玩Serverless、GraphQL的,可能在小城市找不到饭碗。
更重要的是:MyBatis的学习成本低,迁移性强。不像某些框架,离开特定生态就废了。
我甚至觉得,掌握MyBatis这种“老派但实用”的技术,反而是一种职业韧性。经济下行期,企业更看重“能干活、不出错”的人,而不是“会十个新框架但调不好SQL”的花架子。
代码人生:技术之外,还有生活
写这篇文的时候,已经是凌晨一点。窗外下着雨,孩子白天发烧,老婆睡在儿童房陪他。我本该休息,但想着再更新一下个人博客——毕竟简历里写着“技术分享爱好者”,总得有点产出。
有时候会怀疑:天天和SQL、事务、连接池打交道,值得吗?看着同龄人买房、结婚、升职,而我还在为一个慢查询熬通宵。
但转念一想,MyBatis教会我的,不只是怎么写SQL,而是如何在约束中寻找自由。就像现实生活:房贷是约束,通勤是约束,但只要在这些框架里找到自己的节奏,依然能写出优雅的“人生代码”。
给正在学MyBatis的你几点建议
- 别死磕配置:Spring Boot + MyBatis Starter几行配置就能跑起来,先把Demo跑通再说。
- 善用MyBatis-Plus:国产增强版,CRUD不用写SQL,但底层原理一定要懂。
- SQL优化是必修课:再好的框架也救不了烂SQL。学会看执行计划,加索引,避免全表扫描。
- 别鄙视“老技术”:MyBatis从2010年火到现在,说明它解决了真问题。技术没有高低,只有合不合适。
最后:关于留下,还是离开
昨天收到老家一家国企的面试邀请,薪资12k,双休,离父母家步行十分钟。我犹豫了很久,最终回复:“感谢,但我还想在北京再拼两年。”
不是舍不得这里,而是舍不得自己这几年积累的技术深度。MyBatis只是冰山一角,背后是整个Java生态的理解、分布式系统的经验、高并发场景的锤炼。
代码可以重构,人生却不能rollback。但只要手里有技术,心里有方向,无论在哪座城市,都能跑通自己的“主程序”。
共勉。
—— 一个还在挤地铁的北漂程序员,2024年4月于回龙观出租屋

评论 0