请写一篇关于【MyBatis基础教程:Java持久层框架入门】的技术文章

K8s驯兽师
2025-12-16 11:43
阅读 736

去年十月,北京的秋天冷得特别早。那天晚上十点半,我刚挤完回天通苑的地铁——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:灵活是灵活,但重复代码多到想哭。PreparedStatementResultSet、连接池管理……写三天就想转行送外卖。
  • MyBatis:SQL和代码分离,既保留了灵活性,又通过XML或注解简化了CRUD。你可以清晰地看到每一条SQL,也能轻松优化。

举个真实例子:上周五晚上,产品临时加需求,要在一个千万级用户表里按动态条件分页查询。用Hibernate?光生成HQL就得调试半天。用MyBatis?我直接在XML里写<where> + <if>标签,十分钟搞定,还能加LIMIT防翻车。


MyBatis入门:三步走,别被文档吓到

别被官网那堆配置吓退。其实核心就三点:

  1. 定义Mapper接口

    public interface UserMapper {
        User selectById(@Param("id") Long id);
        List<User> selectByCondition(@Param("name") String name, @Param("age") Integer age);
    }
    
  2. 写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>
    
  3. 在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的你几点建议

  1. 别死磕配置:Spring Boot + MyBatis Starter几行配置就能跑起来,先把Demo跑通再说。
  2. 善用MyBatis-Plus:国产增强版,CRUD不用写SQL,但底层原理一定要懂。
  3. SQL优化是必修课:再好的框架也救不了烂SQL。学会看执行计划,加索引,避免全表扫描。
  4. 别鄙视“老技术”:MyBatis从2010年火到现在,说明它解决了真问题。技术没有高低,只有合不合适。

最后:关于留下,还是离开

昨天收到老家一家国企的面试邀请,薪资12k,双休,离父母家步行十分钟。我犹豫了很久,最终回复:“感谢,但我还想在北京再拼两年。”

不是舍不得这里,而是舍不得自己这几年积累的技术深度。MyBatis只是冰山一角,背后是整个Java生态的理解、分布式系统的经验、高并发场景的锤炼。

代码可以重构,人生却不能rollback。但只要手里有技术,心里有方向,无论在哪座城市,都能跑通自己的“主程序”。

共勉。

—— 一个还在挤地铁的北漂程序员,2024年4月于回龙观出租屋

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝