作者:小傅哥

博客: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. servlet和action的区别

    1.Servlet:默认在第一次访问时被创建,创建一次,单实例对象 2.Action:访问时被创建,每次访问action的时候,都会创建action对象,创建多次,多实例对象

  2. API管理工具介绍

    ​ 时间都去哪里了 敏捷迭代和团队协作,前后端分离的工作模式几乎是每个互联网公司的常规工作模式. 前后端分离,各自开发的优点很多,其中一项是它只需要提供一个统一的API接口,即可被web,iOS,An ...

  3. Java学习day25

    今天学习了UDP数据发送实现以及URL下载网络资源 UDP实现两个端口数据传输: package com.Cra2iTeT.chat; import java.io.BufferedReader; i ...

  4. IDEA Debug过程中使用Drop Frame或Reset Frame实现操作回退

    大家在Debug程序的时候,是否遇到过因为"下一步"按太快,而导致跳过了想要深入分析的那段代码?是不是很想要有"回到上一步"这样的操作呢? 在IDEA中就提供了 ...

  5. 2021.07.17 P4170 染色(区间DP)

    2021.07.17 P4170 染色(区间DP) [P4170 CQOI2007]涂色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.目标状态可以由哪些状态转移过来. ...

  6. debian 11 开启 samba 共享文件夹

    安装 apt-get install   samba 安装时,提示搜索不到 此包时 解决办法1:apt-get update  更新源 解决办法2:更改镜像源,可以采用阿里云,网易云等镜像站里提供的镜 ...

  7. Python学习之路——类-面向对象编程

    类 面向对象编程 通过类获取一个对象的过程 - 实例化 类名()会自动调用类中的__init__方法 类和对象之间的关系? 类 是一个大范围 是一个模子 它约束了事务有哪些属性 但是不能约束具体的值 ...

  8. linux下can调试工具canutils安装与使用

    0.  编译环境所需要的工具 libsocketcan-0.0.11.tar.bz2 canutils-4.0.6.tar.bz2 下载路径 https://public.pengutronix.de ...

  9. /proc/meminfo 解释

  10. ChCore Lab3 用户进程和异常处理 实验笔记

    本文为上海交大 ipads 研究所陈海波老师等人所著的<现代操作系统:原理与实现>的课程实验(LAB)的学习笔记的第三篇:用户进程与异常处理.所有章节的笔记可在此处查看:chcore | ...