猜你喜欢
手写MyBatis:渐进式源码实践

手写MyBatis:渐进式源码实践

书籍作者:付政委 ISBN:9787121448393
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:2551
创建日期:2023-06-01 发布日期:2023-06-01
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书基于MyBatis的核心逻辑,通过实现简单版MyBatis的方式,对MyBatis进行分析、设计和实践。本书以实践为核心,摒弃MyBatis源码中繁杂的内容,聚焦于MyBaits中的核心逻辑,简化代码实现过程,以渐进式的开发方式,逐步实现MyBaits中的核心功能。从解析、绑定、反射、缓存,到会话和事务操作,再到如何与Spring、Spring Boot进行关联注册Bean对象,达到整合部分功能的目的。读者可以把此次学习当作开发一个项目,由此可以看到MyBatis从无到有,再到完善和整合的全过程。


本书既可以作为计算机相关行业研发人员的辅导书,也可以作为高等院校计算机专业学生的参考书。无论是初学者,还是中级和高级研发人员,都能从本书中获得启发。


作者简介

付政委(小傅哥)


作为一名一线互联网Java工程师、架构师,曾开发过交易、营销类项目,运营、活动类项目,设计过中间件,组织过系统重构,编写过技术专利。他不仅从事业务系统的开发工作,也经常做一些字节码插桩类的设计和实现,对架构的设计和落地具有丰富的经验。他既热衷于Java语言,也喜欢研究中继器、I/O板卡、C#和PHP,是一名活跃的技术“折腾者”。常逛GitHub,乐于分享技术文章。

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


编辑推荐
适读人群 :本书既可以作为计算机相关行业研发人员的辅导书,也可以作为高等院校计算机专业学生的参考书。无论是初学者,还是中级和高级研发人员,都能从本书中获得启发。

本书通过手写 MyBatis 的方式,由易到难,手把手带领读者从零开始写出自己的MyBatis框架。

本书删繁就简,筛选MyBatis 源码中的核心逻辑,简化代码实现过程,学习包括解析XML文件、绑定映射器、代理DAO 接口、数据源池化反射工具包、插件、缓存数据、会话实现等核心技术。

本书提供所有章节的配套源码及解读,方便读者动手实践。


前言

前言

MyBatis是遵循Apache License 2.0许可的自由软件。2004年,Clinton Begin将iBATIS的名称和代码都捐赠给了Apache软件基金会。2010年,由Apache软件基金会迁移到Google Code,并更名为MyBatis。2013年,再次迁移到GitHub进行迭代和维护。


MyBatis是一款非常优秀的ORM框架。它通过配置XML文件或Java注解的方式,将Java代码中DAO对象类与SQL语句进行映射关联,完成对数据库的增、删、改、查操作。正是因为MyBatis具有简单、易用和灵活等特性,所以成为众多互联网公司开发Java项目的首选ORM框架。


希望长期从事编程开发工作的架构师和研发人员不仅要熟练使用MyBatis,还要掌握其源码设计。学习设计思想和设计模式在实际场景中的应用方法,可以提高架构师和研发人员对业务工程架构的设计能力,以及基于MyBatis扩展各类技术插件的能力,从而实现监控、加密、路由等功能。


为什么撰写本书

在遇到MyBatis的报错提醒,以及需要基于MyBatis开发各类技术插件时,大部分研发人员会尝试阅读MyBatis源码。由于MyBatis源码体量庞大、语法复杂,也不像平常的业务流程代码一样具有分层结构,并且使用了大量的设计模式,因此理解难度比较大。研发人员很难厘清其中的各个代码类的调用顺序和各个类之间的关系。


笔者阅读了不少关于MyBatis的图书,在反复学习源码后,仍然难以理解MyBatis中各项功能的实现细节。其中一个原因是没有动手实践,只阅读图书很难完全掌握MyBatis的精髓。因此,笔者结合对框架功能细节的拆解,按照项目的实现过程,分析每个功能逻辑的设计原则、设计方案和落地代码,渐进式地完成了整个框架的开发。就像做一个项目一样,完整实现了MyBatis的功能,这样不仅可以深入地了解和认识MyBatis,还可以体会更多精妙的设计原则和设计模式。笔者把关于手动实现简单版MyBatis 的内容编写成书,希望可以帮助更多的研发人员学习MyBatis 源码,编写出有价值的设计方案。


本书主要内容

本书采用从零手写MyBatis 的方式, 摒弃MyBatis 源码中繁杂的内容, 只选择MyBatis 中的核心逻辑,简化代码实现过程,保留核心功能,如解析XML文件、绑定映射器、代理DAO 接口、数据源池化反射工具包、插件、缓存数据、会话实现,以及和Spring、Spring Boot 整合等。在开发过程中,细化功能模块,逐步完成一个简单版MyBatis 框架。

本书共22 章。引言介绍了学习MyBatis 的方法,以及本书源码的获取和使用方式。


- 第1 ~ 4 章:拆解和实现ORM 框架的基本功能,构建会话的基本调用流程,解析

- XML 文件,以及串联DefaultSqlSession 结合解析配置项获取展示信息。

- 第5 ~ 8 章:创建和使用数据源,池化技术的实现,完成执行SQL 语句的操作,同时引入反射工具包,实现对属性信息的获取和设置。

- 第9 ~ 12 章:以实现ORM 框架的基本功能为目的,完善静态SQL 的标准化解析、

- 参数设置和结果封装,使整个ORM 框架可以处理基本的新增、删除、修改和查询操作。

- 第13 ~ 19 章:以完善ORM 框架的核心功能逻辑为目的,实现注解SQL 解析、ResultMap 参数、事务处理自增索引、动态SQL 解析、插件、一级缓存和二级缓存等功能。

- 第20 ~ 22 章:利用ORM 框架整合Spring 和Spring Boot,并介绍整个核心流程,同时总结ORM 框架开发中涉及的10 种设计模式。


如何阅读本书

本书通过渐进式的开发方式实现整个MyBatis 核心源码的开发。首先,每章开头会列出难度和重点;然后,正文介绍要处理的问题、具体设计和实现代码;最后,给出测试验证和总结。

在阅读本书的过程中,建议读者先阅读“引言”,以便以全局的视角了解本书要实现的MyBatis 框架的相关功能,并掌握学习方法。另外,“引言”中也列举了本书工程源码的环境配置、获取和使用方法。


致谢

特别感谢我的父母(付井海、徐文杰)、妻子(郭维清),由于他们在日常生活中分担了许多家庭任务,因此笔者才有更多的时间投入文字创作中,本书才能与广大读者见面。

感谢灵魂设计师Beebee 老师为本书设计封面插图。

感谢电子工业出版社博文视点及宋亚东编辑为本书出版所做的一切。

由于笔者水平有限,书中难免存在一些不足之处,希望广大读者给予批评、指正。

付政委(小傅哥)


目录

引言 / 1

第1章 实现一个简单的ORM框架 / 6

1.1 ORM框架实现的说明 / 6

1.2 简单ORM框架的设计 / 7

1.3 简单ORM框架的实现 / 7

1.4 ORM框架的功能测试 / 15

1.5 总结 / 18


第2章 创建简单的映射器代理工厂 / 19

2.1 ORM框架的执行过程 / 19

2.2 映射器代理的设计 / 20

2.3 映射器代理的实现 / 20

2.4 DAO接口代理的测试 / 23

2.5 总结 / 24


第3章 映射器的注册和使用 / 25

3.1 会话模型的思考 / 25

3.2 会话模型的设计 / 26

3.3 会话模型的实现 / 27

3.4 会话模型的测试 / 32

3.5 总结 / 33


第4章 XML的解析和注册 / 34

4.1 ORM框架的核心流程 / 34

4.2 XML操作的设计 / 35

4.3 XML操作的实现 / 36

4.4 XML配置的测试 / 41

4.5 总结 / 42


第5章 数据源的创建和使用 / 43

5.1 执行SQL语句的介绍 / 43

5.2 数据源解析的设计 / 44

5.3 数据源解析的实现 / 44

5.4 数据源使用的测试 / 53

5.5 总结 / 55


第6章 数据源池化技术的实现 / 56

6.1 池化技术的思考 / 56

6.2 池化技术的设计 / 56

6.3 池化技术的实现 / 57

6.4 数据源使用的测试 / 67

6.5 总结 / 72


第7章 SQL执行器的定义和实现 / 73

7.1 会话执行SQL的分析 / 73

7.2 执行器模块的设计 / 74

7.3 执行器模块的实现 / 75

7.4 功能流程的测试 / 84

7.5 总结 / 86


第8 章 元对象反射工具包 / 87

8.1 反射工具包的用途 / 87

8.2 反射工具包的设计 / 88

8.3 反射工具包的实现 / 89

8.4 反射工具包的测试 / 99

8.5 总结 / 103


第9 章 细化XML 语句构建器 / 104

9.1 XML 解析过度耦合 / 104

9.2 XML 语句解析的设计 / 105

9.3 XML 语句解析的实现 / 107

9.4 XML 语句解析的测试 / 116

9.5 总结 / 118


第10 章 封装参数设置处理器 / 119

10.1 参数处理的分析 / 119

10.2 参数处理的设计 / 120

10.3 参数处理的实现 / 122

10.4 参数功能的测试 / 131

10.5 总结 / 135


第11 章 封装结果集处理器 / 136

11.1 参数处理的分析 / 136

11.2 参数处理的设计 / 137

11.3 参数处理的实现 / 139

11.4 功能流程的测试 / 148

11.5 总结 / 150


第12 章 完善框架的增、删、改、查操作 / 151

12.1 会话功能的分析 / 151

12.2 会话功能的设计 / 152

12.3 会话功能的实现 / 154

12.4 会话功能的测试 / 164

12.5 总结 / 169


第13 章 通过注解配置执行SQL语句 / 170

13.1 注解配置的思考 / 170

13.2 注解配置的设计 / 171

13.3 注解配置的实现 / 173

13.4 注解配置的测试 / 181

13.5 总结 / 186


第14 章 ResultMap 映射参数的配置 / 187

14.1 字段映射配置的分析 / 187

14.2 字段映射配置的设计 / 188

14.3 字段映射配置的实现 / 190

14.4 字段映射配置的测试 / 199

14.5 总结 / 203

第15 章 返回insert 操作自增索引值 / 204

15.1 分析两条SQL 语句 / 204

15.2 获取自增索引的设计 / 205

15.3 获取自增索引的实现 / 206

15.4 获取自增索引的测试 / 214

15.5 总结 / 216

第16 章 解析动态SQL 语句 / 218

16.1 动态SQL 语句的使用场景 / 218

16.2 解析动态SQL 语句的设计 / 219

16.3 解析动态SQL 语句的实现 / 220

16.4 解析动态SQL 语句的测试 / 228

16.5 总结 / 230

第17 章 插件功能 / 232

17.1 插件功能的分析 / 232

17.2 插件功能的设计 / 233

17.3 插件功能的实现 / 233

17.4 插件功能的测试 / 242

17.5 总结 / 244

第18 章 一级缓存 / 246

18.1 缓存使用的思考 / 246

18.2 一级缓存的设计 / 246

18.3 一级缓存的实现 / 248

18.4 一级缓存的测试 / 259

18.5 总结 / 263

第19 章 二级缓存 / 265

19.1 二级缓存的思考 / 265

19.2 二级缓存的设计 / 266

19.3 二级缓存的实现 / 267

19.4 二级缓存的测试 / 277

19.5 总结 / 281

第20 章 整合Spring / 282

20.1 框架整合的介绍 / 282

20.2 框架整合的设计 / 282

20.3 框架整合的实现 / 283

20.4 框架整合的测试 / 287

20.5 总结 / 291

第21 章 整合Spring Boot / 292

21.1 组件整合的介绍 / 292

21.2 组件整合的设计 / 292

21.3 组件整合的实现 / 293

21.4 组件整合的测试 / 299

21.5 总结 / 302

第22 章 设计模式总结 / 303

22.1 类型:创建型模式 / 303

22.2 类型:结构型模式 / 308

22.3 类型:行为型模式 / 315

22.4 总结 / 320


产品特色