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

作者:小傅哥
博客:https://bugstack.cn
沉淀、分享、成长,让自己和他人都能有所收获!
一、说说:“产”后感受
有人跟我说,手写Spring难,手写Mybatis易?
一股神奇的力量,让我在手写完 Spring 后,开始对 Mybatis 下手。最开始我也觉得 Spring 那么大都写下来了,Mybatis 能有多难?但随着我开始梳理、拆解、细化,Mybatis 框架源码的架构模型后发现,事情没那么简单!
为什么事情没那么简单?因为如果说只是为了体现出一个 ORM 框架的核心结构和功能,7/8 个类就能实现出来。但假如是实现一个完整的串联出重要核心脉络流程的 ORM 框架,至少要在 100个类以上,才能把 Mybatis 这些功能全部串联出来。

那为什么几个类就能搞定的事要,写把开整个 Mybatis 手写一堆的代码来实现呢?
其实这里有一个非常重要的点,就是你学习源码的目的是什么,是为了面试? 为了熟悉流程? 为了跟风? 其实在小傅哥看来,这些都不是学习源码的核心目的和期待的结果。我们学习源码更多的是为了学习这些源码在面对复杂系统问题时候,如何设计工程架构,运用了什么设计原则和哪些设计模式,而这些运用到的思想在代码中又是如何落地的。
这样的东西,才是学习源码应该重视的内容,而且这也是能真的帮助研发人员提高编码思维高度的东西。所以你会看到小傅哥逐步拆解 Mybatis 核心功能模块,通过渐进式的逐步开发实现,层层展开 Mybatis 的设计和实现的神秘面纱(PS:写过以后也不太神秘)。
二、源码:全貌地图
在小傅哥手写完 Mybatis 框架以后,梳理了一张全貌地图,预览整个 Mybatis 框架的执行脉络体系。有了这张打开了战争迷雾地图的指引,再学习起来 Mybatis 的技术,也就变得非常清晰了。

- 这是整个《手写 Mybatis》的全貌地图,小傅哥会带着大家逐步实现这里面的功能模块,分章节细化各个模块的实现流程,最终让读者实现出一个丰富、全面、细致的 ORM 框架。在学习的过程中,大家也可以参考这张图来对照手写的代码以及 Mybatis 的源码,这样更加有利于对 Mybatis 框架的理解。
- 通常如果你不是支离破碎的拼凑式学习,而是成体系的建设自己的知识栈,那么你在学习后,也一定能梳理出一套关于学习过内容的技术地图。
三、查看:小册目录
要吹牛了! 傅哥,手写Mybatis 而已,你怎么把 Mybatis 都手写了!
哈哈哈,写的爽了,就顺便都给敲了,包括:解析、绑定、反射、缓存、事务,这还有注解、数据源、MetaObject 都给干了!
1. 目录

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

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

- 视频:https://www.bilibili.com/video/BV1nY4y1B7eT
- 说明:整套源码编写内容,还会附带着视频讲解,帮助有意愿学习 Mybatis 源码的伙伴,可以快速上手并加深学习理解。
四、加入:手写源码
之所以开放一部分小册的文章和少量的代码,是为了告诉读者在跟随一个什么样的有技术热情的人在学习,能得到什么样的成长。
也正因为我对技术的折腾,看似牛皮的能力,才能让读者放心的追求。一少部分的付费,也是为了把技术分享这条路走的更加坚定。如果不是付费,那么大部分阅读的可能都是别人的潦草笔记,而不是深度的拆解分析,展示给读者来龙去脉。
有需要校招、面试、晋升,想提高自己的技术深度,为自己的职业生涯续期,可以长稳发展,完善自己的技术体系,奔着高级开发和架构师路线的研发伙伴。
源码地址:https://gitcode.net/xiaofuge/small-mybatis

五、总结:我的经验
其实我能知道大部分从事开发人员或者正在上学阶段的同学,其实对于源码的学习,都是非常好的提高技术的方式。但其实一大部分人都不知道对于一个源码框架该从哪下手,很多时候即使阅读源码也是感觉拿绣花针搅拌一缸水,没啥收获还弄的挺疲惫。
这是因为与平常的业务需求开发或者自己学习的案例代码相比,框架源码中运用了大量的设计原则和设计模式对系统功能进行解耦和实现,也使用了不少如反射、代理、字节码等相关技术。
所以如果没有大牛带着你开路,而是自己硬摸索,其实很难里清一套源码的全部脉络。因为人在学习的过程中,总需要一份经验的借鉴、积累和使用,所以在学习源码的过程中也是要借鉴他人的经验,丰富的自己的羽翼,而后再用这些套路去学习其他的源码内容也就变得容易了。
敲了几万行源码后,我给Mybatis画了张“全地图”的更多相关文章
- Ubuntu 10.04 安装Qt4.8.1 源码后字体模糊的问题
Ubuntu 10.04 安装QT4.8.1 源码后字体模糊的问题. 附加解决 QT SDK 4.8.1 链接失败的问题 Ubuntu 10.04 编译QT源码后,编译程序,运行后IPA字体无法正常显 ...
- linux 安装源码后的操作 ldconfig
https://blog.csdn.net/cqkxboy168/article/details/8657487 知识点: .如果使用 ldd 命令时没有找到对应的共享库文件和其具体位置,可能是两种情 ...
- openvswitch2.11.0修改源码后重新编译(2)
一:前提 已经正常安装了SDN环境(mininet和openswitch2.11.0和Ryu) 使用前面教程安装环境SDN实验---使用git安装Mininet (一)测试ovs是否正常使用 1.ry ...
- 深入源码理解Spring整合MyBatis原理
写在前面 聊一聊MyBatis的核心概念.Spring相关的核心内容,主要结合源码理解Spring是如何整合MyBatis的.(结合右侧目录了解吧) MyBatis相关核心概念粗略回顾 SqlSess ...
- 2018-08-27 使用JDT核心库解析JDK源码后初步分析API命名
源自术语词典API项目 · Issue #85 · program-in-chinese/overview, 打算先用早先的代码提取JDK API中的类/方法/参数名, 看看有哪些词需要翻译. 源码在 ...
- 下载Dubbo源码后的编译安装启动
1:安装jdk,maven 配制环境变量: 2:安装zookeeper 配制zookeeper环境变量 3:把dubbo源码编译成war包 启动cmd黑窗口 ,进入 源码文件 ...
- 利用src.rpm包修改源码后重新制作rpm包
1. 下载 .src.rpm包.例:https://repos.fedorapeople.org/repos/openstack/EOL/openstack-grizzly/epel-6/openst ...
- [delphi]修改indy源码后重新编译
http://blog.csdn.net/nerdy/article/details/8702568 虽然indy有一身的毛病,但是一般情况下使用起来还是多方便的. 今天在做一个使用到indy的程序的 ...
- c# 关于抓取网页源码后中文显示乱码的原因分析和解决方法
原因分析:首先,目前大多数网站为了提升网页浏览传输速率都会对网站内容在传输前进行压缩,最常用的是GZIP压缩解压解压算法,也是支持最广的一种. 因为网站传输时采用的是GZIP压缩传输,如果我们接受we ...
随机推荐
- python---变量、常量、注释、基本数据类型
变量 变量:将运算的中间结果暂存到内存中,以便后续程序调用. 变量的命令规则: 变量由字母.数字.下划线组合而成. 不可以数字开头,更不能全是数字. 不能是python的关键字. 不要用中文. 名字要 ...
- 第一阶段:Java基础之OOP
OOP:面向对象编程 三大特征: 封装 继承 多态
- 记录Jenkins升级到最新版遇到的问题
首先吐槽一下Jenkins: 1.安装插件的时候无法根据Jenkins的版本号安装对应的插件! 2.安装插件安装版本不一致的时候无法降低插件版本! 3.为啥要我们升级到最新版! 一.升级原因 我的 ...
- 学习HTML第二天
今日内容: HTML标签:表单标签 CSS HTML标签:表单标签 表单项标签: input:可以通过type属性值,改变元素展示的样式 type属性: text:文本输入框,默认值 placehol ...
- JavaWeb入门day9-随笔(session/cookie)
会话 一个网站怎么证明用户访问过 服务端给客户端一个信件,客户端下次访问服务端带上信件就可以:cookie 服务器登记,下次访问匹配:session 保存会话的技术 cookie 客户端技术(响应.请 ...
- Mysql学习day2随笔
--jion on 连接查询 --jion where 等值查询 建议先用jion on再用where过滤 --inner jion 返回交集 --left join 无论右表是否匹配,都会从左表返回 ...
- go源码阅读 - sync/rwmutex
相比于Mutex来说,RWMutex锁的粒度更细,使用RWMutex可以并发读,但是不能并发读写,或者写写. 1. sync.RWMutex的结构 type RWMutex struct { // 互 ...
- JSP标签、JSTL标签、EL表达
JSP页面转发,附带数据 <jsp:forward page="/jsptag2.jsp"> <jsp:param name="name" v ...
- 开发一款让我们慢慢变好的微信小程序
1. 前言 朋友,你还记得你想学编程最初的目的是什么吗? 先说说我的吧,我最初想学编程的目的只有一点,感觉编程很酷,会写代码的人很厉害!.随着后面参加工作,我马上产生了让我能够在编程这条路上继续走下去 ...
- .NET混合开发解决方案5 WebView2运行时与分发应用
系列目录 [已更新最新开发文章,点击查看详细] 发布使用Microsoft Edge WebView2的应用程序时,客户端计算机上需要安装WebView2运行时,可以安装自动更新的Evergr ...