作者:小傅哥

博客: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://gitcode.net/xiaofuge/small-mybatis

五、总结:我的经验

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

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

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

敲了几万行源码后,我给Mybatis画了张“全地图”的更多相关文章

  1. Ubuntu 10.04 安装Qt4.8.1 源码后字体模糊的问题

    Ubuntu 10.04 安装QT4.8.1 源码后字体模糊的问题. 附加解决 QT SDK 4.8.1 链接失败的问题 Ubuntu 10.04 编译QT源码后,编译程序,运行后IPA字体无法正常显 ...

  2. linux 安装源码后的操作 ldconfig

    https://blog.csdn.net/cqkxboy168/article/details/8657487 知识点: .如果使用 ldd 命令时没有找到对应的共享库文件和其具体位置,可能是两种情 ...

  3. openvswitch2.11.0修改源码后重新编译(2)

    一:前提 已经正常安装了SDN环境(mininet和openswitch2.11.0和Ryu) 使用前面教程安装环境SDN实验---使用git安装Mininet (一)测试ovs是否正常使用 1.ry ...

  4. 深入源码理解Spring整合MyBatis原理

    写在前面 聊一聊MyBatis的核心概念.Spring相关的核心内容,主要结合源码理解Spring是如何整合MyBatis的.(结合右侧目录了解吧) MyBatis相关核心概念粗略回顾 SqlSess ...

  5. 2018-08-27 使用JDT核心库解析JDK源码后初步分析API命名

    源自术语词典API项目 · Issue #85 · program-in-chinese/overview, 打算先用早先的代码提取JDK API中的类/方法/参数名, 看看有哪些词需要翻译. 源码在 ...

  6. 下载Dubbo源码后的编译安装启动

    1:安装jdk,maven       配制环境变量: 2:安装zookeeper      配制zookeeper环境变量 3:把dubbo源码编译成war包 启动cmd黑窗口  ,进入  源码文件 ...

  7. 利用src.rpm包修改源码后重新制作rpm包

    1. 下载 .src.rpm包.例:https://repos.fedorapeople.org/repos/openstack/EOL/openstack-grizzly/epel-6/openst ...

  8. [delphi]修改indy源码后重新编译

    http://blog.csdn.net/nerdy/article/details/8702568 虽然indy有一身的毛病,但是一般情况下使用起来还是多方便的. 今天在做一个使用到indy的程序的 ...

  9. c# 关于抓取网页源码后中文显示乱码的原因分析和解决方法

    原因分析:首先,目前大多数网站为了提升网页浏览传输速率都会对网站内容在传输前进行压缩,最常用的是GZIP压缩解压解压算法,也是支持最广的一种. 因为网站传输时采用的是GZIP压缩传输,如果我们接受we ...

随机推荐

  1. Python接入企业微信 - 推送信息到内部群里

    前言 之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录 其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现. 本 ...

  2. Java三大结构

    Java三大结构 顺序结构(基本结构) 选择结构 循环结构 1. 顺序结构 平时一般语句都默认遵循顺序结构 2. 选择结构 2.1 if单选择结构 语法 if(布尔表达式){ //布尔表达式为true ...

  3. 安装支付宝小程序的 mini-ali-ui

    1.打开文件的根目录 2.使用npm init -y初始化 3. npm install mini-ali-ui --save 安装 4.在json文件里面定义 例如使用loading加载中的组件 完 ...

  4. JavaScript深入理解系列:call与apply

    定义 call和apply:函数调动call()方法在执行的时候,函数的里面的this会指向第一个参数值,除第一个参数值后面的若干支都是传进该函数,简而言之就是改变函数运行时的this指向. 使用示例 ...

  5. petite-vue源码剖析-逐行解读@vue-reactivity之Map和Set的reactive

    本篇我们会继续探索reactive函数中对Map/WeakMap/Set/WeakSet对象的代理实现. Map/WeakMap/Set/WeakSet的操作 由于WeakMap和WeakSet分别是 ...

  6. RecyclerView + SQLite 简易备忘录-----中(1)

    在上一节讲完了登录界面的内容,现在随着Activity的跳转,来到MainActivity. 1.主界面activity_main.xml 由上图,activity_main.xml的内容很简单. 首 ...

  7. 『现学现忘』Git基础 — 14、Git基础操作的总结与补充

    目录 1.Git本地版本库结构 2.Git常用操作方法 3.补充:添加多个文件到暂存区 4.补充:提交操作未写备注 5.补充:从工作区直接提交到版本库 1.Git本地版本库结构 如下图所示: 工作区( ...

  8. es篇-es基础

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. es基础知识 es和solr一样,都是基于Lucene的全文检索数据库 ...

  9. XCTF练习题---MISC---pdf

    XCTF练习题---CRYPTO---混合编码解析 flag:flag{security_through_obscurity} 解题步骤: 1.观察题目,下载附件 2.根据题目提示,下载文件,发现是一 ...

  10. Spring mvc 使用@RequestBody 500错误

    今天在使用@RequestBody的时候,遇到一个http500错误,记录一下 让我们来看看我是怎么样错的,贴上代码 @PostMapping("/User") public Us ...