# 敲了几万行源码后,我给Mybatis画了张“全地图”

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

# 一、说说:“产”后感受

🤔有人跟我说,手写Spring难,手写Mybatis易?

一股神奇的力量,让我在手写完 Spring 后 (opens new window),开始对 Mybatis 下手 (opens new window)。最开始我也觉得 Spring 那么大都写下来了,Mybatis 能有多难?但随着我开始梳理、拆解、细化,Mybatis 框架源码的架构模型后发现,事情没那么简单

为什么事情没那么简单?因为如果说只是为了体现出一个 ORM 框架的核心结构和功能,7/8 个类就能实现出来。但假如是实现一个完整的串联出重要核心脉络流程的 ORM 框架,至少要在 100个类以上,才能把 Mybatis 这些功能全部串联出来。

那为什么几个类就能搞定的事要,写把开整个 Mybatis 手写一堆的代码来实现呢?

其实这里有一个非常重要的点,就是你学习源码的目的是什么,是为了面试? 为了熟悉流程? 为了跟风? 其实在小傅哥看来,这些都不是学习源码的核心目的和期待的结果。我们学习源码更多的是为了学习这些源码在面对复杂系统问题时候,如何设计工程架构,运用了什么设计原则和哪些设计模式,而这些运用到的思想在代码中又是如何落地的。

这样的东西,才是学习源码应该重视的内容,而且这也是能真的帮助研发人员提高编码思维高度的东西。所以你会看到小傅哥逐步拆解 Mybatis 核心功能模块,通过渐进式的逐步开发实现,层层展开 Mybatis 的设计和实现的神秘面纱(PS:写过以后也不太神秘)。

# 二、源码:全貌地图

在小傅哥手写完 Mybatis 框架以后,梳理了一张全貌地图,预览整个 Mybatis 框架的执行脉络体系。有了这张打开了战争迷雾地图的指引,再学习起来 Mybatis 的技术,也就变得非常清晰了。

小傅哥 Mybatis 框架源码技术全貌地图

  • 这是整个《手写 Mybatis》 (opens new window)的全貌地图,小傅哥会带着大家逐步实现这里面的功能模块,分章节细化各个模块的实现流程,最终让读者实现出一个丰富、全面、细致的 ORM 框架。在学习的过程中,大家也可以参考这张图来对照手写的代码以及 Mybatis 的源码,这样更加有利于对 Mybatis 框架的理解。
  • 通常如果你不是支离破碎的拼凑式学习,而是成体系的建设自己的知识栈,那么你在学习后,也一定能梳理出一套关于学习过内容的技术地图。

# 三、查看:小册目录

🤔要吹牛了! 傅哥,手写Mybatis 而已,你怎么把 Mybatis 都手写了!

哈哈哈,写的爽了,就顺便都给敲了,包括:解析、绑定、反射、缓存、事务,这还有注解、数据源、MetaObject 都给干了!

# 1. 目录

《手写Mybatis》小册目录:4部分18章

  • 博客:https://bugstack.cn (opens new window) - 博客菜单中 Spring 栏目下 -> 手撸 Mybatis
  • 说明:在18章课程中,会逐步带着读者手写出一套 Mybatis 框架,并且是一套串联所有核心流程的 Mybatis 框架,阅读学习后会对 ORM 源码有透彻清晰的了解。

# 2. 源码

《手写Mybatis》源码内容:渐进式迭代开发

  • 源码:每一个章节的代码,都会在上一章节的基础上进行扩展和迭代,这样可以更加清晰的知晓,每一个章节都在添加什么功能,改动了哪些代码,新增了什么模块。这样的方式能让即使是小白读者,也可以逐步学习掌握。

# 3. 视频(B站)

《手写Mybatis》视频课程:B站视频

# 四、加入:手写源码

全部解锁🔓此项目的学习,可以加入小傅哥的知识星球:码农会锁。之所以开放一部分小册的文章和少量的代码,是为了告诉读者在跟随一个什么样的有技术热情的人在学习,能得到什么样的成长。

也正因为我对技术的折腾,😄看似牛皮的能力,才能让读者放心的追求。一少部分的付费,也是为了把技术分享这条路走的更加坚定。如果不是付费,那么大部分阅读的可能都是别人的潦草笔记,而不是深度的拆解分析,展示给读者来龙去脉。

星球适合:有需要校招、面试、晋升,想提高自己的技术深度,为自己的职业生涯续期,可以长稳发展,完善自己的技术体系,奔着高级开发和架构师路线的研发伙伴。

留言来自加入知识星球:码农会锁,伙伴的认可

  • 链接https://t.zsxq.com/Ja27ujq (opens new window)
  • 优惠:关注公众号【bugstack虫洞栈】回复【星球】可获得优惠券 - 如果优惠用尽,可以在公众号获取
  • 说明:加入星球后,阅读阅读星球置顶消息,里面有清晰明确的学习说明和视频介绍,以及包括PDF资料下载、加入项目仓库、简历模板等。加入星球可以学习到更多的知识内容

# 五、总结:我的经验

其实我能知道大部分从事开发人员或者正在上学阶段的同学,其实对于源码的学习,都是非常好的提高技术的方式。但其实一大部分人都不知道对于一个源码框架该从哪下手,很多时候即使阅读源码也是感觉拿绣花针搅拌一缸水,没啥收获还弄的挺疲惫😫。

这是因为与平常的业务需求开发或者自己学习的案例代码相比,框架源码中运用了大量的设计原则设计模式对系统功能进行解耦实现,也使用了不少如反射代理字节码等相关技术。

所以如果没有大牛带着你开路,而是自己硬摸索,其实很难里清一套源码的全部脉络。因为人在学习的过程中,总需要一份经验的借鉴、积累和使用,所以在学习源码的过程中也是要借鉴他人的经验,丰富的自己的羽翼,而后再用这些套路去学习其他的源码内容也就变得容易了。