|
| 1 | +--- |
| 2 | +title: 卧龙、凤雏!两源码学得一,代码质量都不会差! |
| 3 | +lock: need |
| 4 | +--- |
| 5 | + |
| 6 | +# 卧龙、凤雏!两源码学得一,代码质量都不会差! |
| 7 | + |
| 8 | +作者:小傅哥 |
| 9 | +<br/>博客:[https://bugstack.cn](https://bugstack.cn) |
| 10 | + |
| 11 | +> 沉淀、分享、成长,让自己和他人都能有所收获!😄 |
| 12 | +
|
| 13 | +有人问我,编程能力怎么提升,我说学源码学的。他有问我,是不学 Spring 源码比学 MyBatis 更好,MyBatis 太简单了!🤨 我说死鬼,且边去。 |
| 14 | + |
| 15 | +MyBatis 源码真的没有那么简单,也没有说不如 Spring 源码的设计。一个在源码中驾驭了数十种以上设计模式的 MyBatis 它的代码设计,可不是小扒菜。可以这么说,学了 Spring 源码可以应对面试和开发组件,但学了 MyBatis 的源码,**那么你可以做架构师**!`接下来,小傅哥就告诉你为什么!` |
| 16 | + |
| 17 | +## 一、卧龙凤雏:平分秋色 |
| 18 | + |
| 19 | +Spring 和 MyBatis 可以说是 Java 行业的卧龙凤雏,其他同类的框架也不少,但要说稳定、可靠、方便,还得是它们2个的组合。也正因为这样在各个企业中,也是用的非常之多,所以面试的时候也更喜欢问这2个框架源码。 |
| 20 | + |
| 21 | +那么这两个框架在设计和实现上,能平分秋色吗?🤔 问你这两个框架有啥不同,你能一句话就总结到位不? |
| 22 | + |
| 23 | +<div align="center"> |
| 24 | + <img src="https://bugstack.cn/images/article/about/about-230514-01.png?raw=true" width="750px"> |
| 25 | +</div> |
| 26 | + |
| 27 | +**卧龙:Spring** - 万物皆可Bean,把一个 Bean 对象拆分到稀碎,细化流程。在每个拆分后的节点内,插入可被外部使用的动作流程。如你可以在Bean对象初始化过程中修改获得对象、修改对象、添加对象等任何你想扩展的流程。 |
| 28 | + |
| 29 | +**凤雏:MyBatis** - 与 Spring 不同的是,MyBatis 管理的是多边服务。左手拿着 JDBC、右手握着 Java DAO,通过六合之力,把两招合并成一整招。你过来呀,执行呀! |
| 30 | + |
| 31 | +所以,在小傅哥深度学习完两套源码后,感受;**Spring 复杂精妙,设计的高**。**MyBatis 大开大和,设计的硬**。Spring 学习完以后,使用 Spring 和调试 Bug 都会变得有理有据,也能基于 Spring 开发 SpringBoot Starter 组件。而 MyBatis 学习完,是更贴近业务开发,你能学习到非常多的编码技巧。就仅仅一个 session 会话流程模型的设计,你既可以用到 API网关,也可以用到如 ChatGPT 接口封装。有了 MyBatis 源码的学习经验,对于这样的同类诉求开发,你会变得非常得心应手。而这就是你在积累架构师对系统设计经验和落地能力。 |
| 32 | + |
| 33 | +## 二、架构之美:沁人心脾 |
| 34 | + |
| 35 | +我特别喜欢有难度也有复杂流程的的东西,因为难度一上来,就有了驾驭的空间。就像天罡36板斧的能力,只切菜就没看头。但如果是战场交锋,那么打起来肯定漂亮。而且很多小伙伴在职场上的晋升,也都是靠那些**俏活**上去的,天天搞 ERP 写 CRUD 多少年都白费蜡。 |
| 36 | + |
| 37 | +那么小傅哥在学习完 MyBatis 的源码后,就开始架构了 API 网关的设计。MyBatis 是管理着 JDBC 与 DAO,而 API 是管理着 RPC 与 HTTP。这不是天然的 session 会话模型设计吗,简直和 MyBatis 的架构一毛一样。干它势在必行!—— 小傅哥接下来就把这两套架构模型展示出来,让大家对比看看。 |
| 38 | + |
| 39 | +### 1. MyBatis ORM架构模型 |
| 40 | + |
| 41 | +<div align="center"> |
| 42 | + <img src="https://bugstack.cn/images/article/spring/mybatis-220320-00.png?raw=true" width="950px"> |
| 43 | +</div> |
| 44 | + |
| 45 | +### 2. API 网关架构模型 |
| 46 | + |
| 47 | +<div align="center"> |
| 48 | + <img src="https://bugstack.cn/images/article/assembly/api-gateway/api-gateway-0-04.png?raw=true" width="950px"> |
| 49 | +</div> |
| 50 | + |
| 51 | +这些架构模型,都是小傅哥在学习和设计的时候一条条绘制出来的。主要你能按照我的学习路线指引,也一定能理解透彻每一条知识点,并且绘制出非常清晰有用的架构和模型图。 |
| 52 | + |
| 53 | +## 三、学习路线:走向高端 |
| 54 | + |
| 55 | +[《手写 MyBatis:渐进式源码实践》](https://union-click.jd.com/jdc?e=618%7Cpc%7C&p=JF8BANUJK1olXwQBUVpdAE8SAF8IGVIVXQUCU24ZVxNJXF9RXh5UHw0cSgYYXBcIWDoXSQVJQwYAXV5dC0sQHDZNRwYlNGYHJBcZDhJ0fB1XUgRlL3RUIxYbeEcbM244G1oUXQEKU1hfCHsnA2g4STXN67Da8e9B3OGY1uefK1olXQELUV9ZCkkTBmYMEmsSXQ8yIgoCXAhHXjhMK2slXjYFVFdJDjlWUXsOaWslXTYBZF5cCEMUBmgMGFwRQQYBV1taAFcXBGYNGl8XXwICVV5bOEkWAmsBK2s)有纸质图书和星球中的在线电子版。你可以按照自己的喜欢,选择扫码购买图书或者加入小傅哥的星球。 |
| 56 | + |
| 57 | +<div align="center"> |
| 58 | + <img src="https://bugstack.cn/images/article/about/about-230514-03.png?raw=true" width="200px"/> |
| 59 | + <div style="font-size: 12px;">《手写 MyBatis:渐进式源码实践》@小傅哥</div> |
| 60 | +</div> |
| 61 | + |
| 62 | +除了这本技术图书,**小傅哥的知识星球里**,涵盖了;`业务项目(4)`、`组件项目(3)`、`技术小册(4)`、`手撕源码(2)`、以及`简历辅导`、`小白辅助`的各类课程内容。加入后建议学习路线如下; |
| 63 | + |
| 64 | +<div align="center"> |
| 65 | + <img src="https://bugstack.cn/images/system/zsxq/coupon.png?raw=true" width="350px"> |
| 66 | + <div style="font-size: 12px;">知识星球:码农会锁 - 应用级实战项目学习社群</div> |
| 67 | +</div> |
| 68 | + |
| 69 | +1. **为了面试**:Java面经手册(八股)、Lottery 分布式抽奖(项目)、SpringBoot Starter 中间件设计和开发(拉伸技术)、手写Spring/手写Mybatis(2选1) |
| 70 | +2. **夯实能力**:重学Java设计模式、Lottery 分布式抽奖、手写Spring、手写Mybatis、ChatGPT 应用项目 |
| 71 | +3. **拉伸技术**:字节码、IDEA Plugin 开发手册、SpringBoot Starter、API网关 |
| 72 | +4. **网络编程**:Netty 4.x 小册、IM(Netty 4.x + JavaFx) |
| 73 | +5. **应届小白**:重学Java设计模式、Java面经手册、手写Spring/手写Mybatis(2选1)、Lottery 分布式抽奖、SpringBoot Starter 中间件设计和开发,之后学习拉伸技术、网络编程 |
| 74 | + |
| 75 | +<div align="center"> |
| 76 | + <img src="https://bugstack.cn/images/article/about/about-230514-02.png?raw=true" width="750px"> |
| 77 | +</div> |
| 78 | + |
| 79 | +--- |
| 80 | + |
| 81 | +**用户反馈**: |
| 82 | + |
| 83 | +- [@星期一](https://t.zsxq.com/0chHS92j5):`通过两天的学习成功将第五、第六章节跑通并完成了测试,感受最深的是对策略模式和模板模式的进一步了解,之前在看重学java设计模式的时候,对于很多设计模式都处于一知半解的状态,现在结合这个抽奖系统,让我对这两个设计模式有了不一样的理解与认识,感觉真的很棒。这种边记笔记,边学习的感觉真的很好,以前可能看视频学,一天能看很多章节,但其实很多东西都没有弄懂,现在是一天一个章节,慢慢去理解代码怎么编写,怎么完成。这些天虽然还有些地方理解的不是很清楚,我还是继续接着学,到时候回头再来温习一遍。` |
| 84 | +- [@星期一](https://t.zsxq.com/0cmdaowpB):`本身我自己学习是没有画图,记录学习遇到问题的解决方法的习惯,但加入了知识星球,看到里面许多像我一样的学员都开始跟着小傅哥去画图,去记录学习中遇到的问题,我自己也尝试着这样去做,发现学习的思路更加清晰,且记忆更深` |
| 85 | +- [@神经蛙](https://t.zsxq.com/0cIVeIzgI):`断断续续花了2个星期终于感觉完整学完了抽奖系统,首先非常感谢小傅哥,该项目确实让我感觉学习到很多优秀的内容,以下是我学习的一个阶段性总结` |
| 86 | +- [@L.ast](https://t.zsxq.com/0cJSH02ju):`花费了十天时间把整个抽奖系统的基本内容全部动手实现,对个人而言设计模式、xxljob,kafka,以及路由组件设计这部分收获很多。打算抽一天时间回顾总结项目细节,尤其是对一些订单id和日期id这部分设计的作用,解决什么问题。` |
| 87 | +- [@BookSea](https://t.zsxq.com/0cxV12kki):`加入傅哥的星球是我做过最好的投资之一,2022年3月,加入了傅哥的星球。2023年3月,迎来了我的职业生涯的第一次跳槽。` |
| 88 | + |
0 commit comments