MyBatis 源码分析系列文章合集

1.简介

我从七月份开始阅读MyBatis源码,并在随后的40天内陆续更新了7篇文章。起初,我只是打算通过博客的形式进行分享。但在写作的过程中,发现要分析的代码太多,以至于文章篇幅特别大。在这7篇文章中,有4篇文章字数超过了1万,最长的一篇文章约有2.7万字(含代码)。考虑到超长文章对读者不太友好,以及拆分文章工作量也不小等问题。遂决定将博文整理成电子书,方便大家阅读。

经过两周紧张的排版,《一本小小的MyBatis源码分析书》诞生了。本书共7章,约300页。本书以电子书的形式发布,大家可自由的下载。下载地址如下:

百度网盘:点击下载

百度文库:审核中,这里先放上我的个人主页

测试代码:GitHub

下面来看看本书章节的缩略图。

2.目录

第1章 MyBatis入门

???????? 1.1 MyBatis是什么

???????? 1.2 为什么要使用MyBatis

???????? ???????? 1.2.1 使用MyBatis访问数据库

???????? ???????? 1.2.2 使用JDBC访问数据库

???????? ???????? 1.2.3 使用SpringJDBC访问数据库

???????? ???????? 1.2.4 使用Hibernate访问数据库

???????? 1.3如何使用MyBatis

???????? ???????? 1.3.1 单独使用MyBatis

???????? ???????? 1.3.2 在Spring中使用MyBatis

???????? 1.4 本章小结

第2章 配置文件解析过程

???????? 2.1 配置文件解析过程分析

???????? ???????? 2.1.1 解析节点

???????? ???????? 2.1.2 解析节点

???????? ???????? 2.1.3 设置内容到Configuration中

???????? ???????? 2.1.4 解析节点

???????? ???????? 2.1.5 解析节点

???????? ???????? 2.1.6 解析节点

???????? ???????? 2.1.7 解析节点

???????? 2.2 本章小结

第3章 映射文件解析过程

???????? 3.1 映射文件解析解析入口

???????? 3.2 解析映射文件

???????? ???????? 3.2.1 解析节点

???????? ???????? 3.2.2 解析节点

???????? ???????? 3.2.3 解析节点

???????? ???????? 3.2.4 解析节点

???????? ???????? 3.2.5 解析SQL语句节点

???????? 3.3 Mapper接口绑定过程分析

???????? 3.4 处理未完成解析的节点

???????? 3.5 本章小结

第4章 SQL执行流程

???????? 4.1 SQL执行入口

???????? ???????? 4.1.1 为Mapper接口创建代理对象

???????? ???????? 4.1.2 执行代理逻辑

???????? 4.2 查询语句的执行过程

???????? ???????? 4.2.1 selectOne方法分析

???????? ???????? 4.2.2 获取BoundSql

???????? ???????? 4.2.3 创建StatementHandler

???????? ???????? 4.2.4 设置运行时参数到SQL中

???????? ???????? 4.2.5 #{}占位符的解析与参数的设置过程梳理

???????? ???????? 4.2.6 处理查询结果

???????? 4.3 更新语句的执行过程

???????? ???????? 4.3.1 更新语句执行过程全貌

???????? ???????? 4.3.2 KeyGenerator

???????? ???????? 4.3.3 处理更新结果

???????? 4.4 SQL执行过程总结

???????? 4.5 本章小结

第5章 内置数据源

???????? 5.1 内置数据源初始化过程

???????? 5.2 UnpooledDataSource

???????? ???????? 5.2.1 初始化数据库驱动

???????? ???????? 5.2.2 获取数据库连接

???????? 5.3 PooledDataSource

???????? ???????? 5.3.1 辅助类介绍

???????? ???????? 5.3.2 获取连接

???????? ???????? 5.3.3 回收连接

???????? 5.4 本章小结

第6章 缓存机制

???????? 6.1 缓存类介绍

???????? ???????? 6.1.1 PerpetualCache

???????? ???????? 6.1.2 LruCache

???????? ???????? 6.1.3 BlockingCache

???????? 6.2 CacheKey

???????? 6.3 一级缓存

???????? 6.4 二级缓存

???????? 6.5 本章小结

第7章 插件机制

???????? 7.1 插件机制原理

???????? ???????? 7.1.1 植入插件逻辑

???????? ???????? 7.1.2 执行插件逻辑

???????? 7.2 实现一个分页插件

???????? 7.3 本章小结

附录 MyBatis源码分析系列文章列表

3.写在最后

本书的排版工作耗时两周,其中40%的时间用在了内容的修改上,另外40%用在了代码的整理与排版上,最后的20%则是花在了图片和小修小改上。总的来说,整个过程还是有点辛苦的。当然,在完成排版后,成就感也是满满的。经过这次排版,深感写书不易。所以大家在日常学习过程中,应尽量买正版书予以支持。我在写MyBatis系列文章中,买了一本书作为参考,这本书是《MyBatis技术内幕》。这本书在我阅读源码的过程中,给予了不少的帮助,这里感谢该书的作者。同时,也向大家推荐这本书。另外,感谢清华出版社的王金柱编辑提供的书籍排版样例,使得我在排版的过程中可以有所参照。

最后需要说明的是,我个人工作刚满两年,不管是技术能力,还是工作经验,均处于入门水平。同时这也是我写的第一本电子书,经验不足。因此对于书中写的不好的地方,还请大家见谅,同时也希望大家多多指导。

好了,本文到此结束,感谢大家的阅读。

本文在知识共享许可协议 4.0 下发布,转载需在明显位置处注明出处
作者:田小波
本文同步发布在我的个人博客:https://www.tianxiaobo.com


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

原文地址:https://www.cnblogs.com/nullllun/p/9625518.html

时间: 2024-11-11 06:08:03

MyBatis 源码分析系列文章合集的相关文章

Spark SQL 源码分析系列文章

从决定写Spark SQL源码分析的文章,到现在一个月的时间里,陆陆续续差不多快完成了,这里也做一个整合和索引,方便大家阅读,这里给出阅读顺序 :) 第一篇 Spark SQL源码分析之核心流程 第二篇 Spark SQL Catalyst源码分析之SqlParser 第三篇 Spark SQL Catalyst源码分析之Analyzer 第四篇 Spark SQL Catalyst源码分析之TreeNode Library 第五篇 Spark SQL Catalyst源码分析之Optimize

【Spark SQL 源码分析系列文章】

从决定写Spark SQL源码分析的文章,到现在一个月的时间里,陆陆续续差不多快完成了,这里也做一个整合和索引,方便大家阅读,这里给出阅读顺序 :) 第一篇 Spark SQL源码分析之核心流程 第二篇 Spark SQL Catalyst源码分析之SqlParser 第三篇 Spark SQL Catalyst源码分析之Analyzer 第四篇 Spark SQL Catalyst源码分析之TreeNode Library 第五篇 Spark SQL Catalyst源码分析之Optimize

MyBatis 源码分析 - 配置文件解析过程

* 本文速览 由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括.本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于settings,typeAliases和typeHandlers等,本文的篇幅也主要在对这三个配置解析过程的分析上.下面,我们来一起看一下本篇文章的目录结构. 从目录上可以看出,2.3节.2.5节和2.8节的内容比较多.其中2.3节是关于settings配置解析过程的分析,除了对常规的 XML 解析过程分析,本节额外的分析了元

MyBatis 源码分析 - 插件机制

1.简介 一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展.这样的好处是显而易见的,一是增加了框架的灵活性.二是开发者可以结合实际需求,对框架进行拓展,使其能够更好的工作.以 MyBatis 为例,我们可基于 MyBatis 插件机制实现分页.分表,监控等功能.由于插件和业务无关,业务也无法感知插件的存在.因此可以无感植入插件,在无形中增强功能. 开发 MyBatis 插件需要对 MyBatis 比较深了解才行,一般来说最好能够掌握 MyBatis 的源码,门槛相对较高.本篇

【MyBatis源码分析】环境准备

前言 之前一段时间写了[Spring源码分析]系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章[MyBatis源码分析],在[MyBatis源码分析]文章的基础之上,可以继续分析数据库连接池.Spring整合MyBatis源码.Spring事物管理tx等等. [MyBatis源码分析]整个文章结构相较[Spring源码分析]稍微改一改,后者会在每一部分源码分析的开头列出要分析的源码的实例,比如: 分析Bean流程加载,就会先写Bean的代码示例及xml

Cordova Android源码分析系列二(CordovaWebView相关类分析)

本篇文章是Cordova Android源码分析系列文章的第二篇,主要分析CordovaWebView和CordovaWebViewClient类,通过分析代码可以知道Web网页加载的过程,错误出来,多线程处理等. CordovaWebView类分析 CordovaWebView类继承了Android WebView类,这是一个很自然的实现,共1000多行代码.包含了PluginManager pluginManager,BroadcastReceiver receiver,CordovaInt

【MyBatis源码分析】select源码分析及小结

示例代码 之前的文章说过,对于MyBatis来说insert.update.delete是一组的,因为对于MyBatis来说它们都是update:select是一组的,因为对于MyBatis来说它就是select. 本文研究一下select的实现流程,示例代码为: 1 public void testSelectOne() { 2 System.out.println(mailDao.selectMailById(8)); 3 } selectMailById方法的实现为: 1 public M

Dubbo源码分析系列-服务的发布

RPC简化类图 RPC模块核心接口和抽象实现 默认实现Dubbo协议的接口和抽象实现 服务发布过程 调用过程 上图是服务提供者暴露服务的主过程: 首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到Invoker的转化.接下来就是Invoker转换到Exporter的过程. Dubbo处理服务暴露的关键

Mybatis源码分析之Cache二级缓存原理 (五)

一:Cache类的介绍 讲解缓存之前我们需要先了解一下Cache接口以及实现MyBatis定义了一个org.apache.ibatis.cache.Cache接口作为其Cache提供者的SPI(ServiceProvider Interface) ,所有的MyBatis内部的Cache缓存,都应该实现这一接口 Cache的实现类中,Cache有不同的功能,每个功能独立,互不影响,则对于不同的Cache功能,这里使用了装饰者模式实现. 看下cache的实现类,如下图: 1.FIFOCache:先进