通用源码阅读指导书——MyBatis源码详解
第1篇 背景介绍
第1章 源码阅读 2
1.1 源码阅读的意义 2
1.2 源码阅读的方法 2
1.3 开源软件 3
1.4 MyBatis源码 4
1.5 本书结构 5
1.5.1 背景知识 5
1.5.2 文件的指代 5
1.5.3 方法的指代 8
查看完整
第1章 源码阅读 2
1.1 源码阅读的意义 2
1.2 源码阅读的方法 2
1.3 开源软件 3
1.4 MyBatis源码 4
1.5 本书结构 5
1.5.1 背景知识 5
1.5.2 文件的指代 5
1.5.3 方法的指代 8
查看完整
易哥,毕业于浙江大学、山东大学,高级软件系统架构师、网络工程师、数据库工程师、软件测试工程师、注册电气工程师。在校成绩前1%,获得国家奖学金两次,一等奖学金四次,科技创新大赛一等奖三次,以及五四青年科学奖等。主要科研方向为机器学习、分布式算法、容错算法在无线传感网络中的应用,相关论文获得IEEE通信协会论文奖。曾担任网站技术部门负责人,具有丰富的互联网开发经验。先后设计和实现了众多系统和平台,也是活跃的开源开发者。现专注软件系统架构设计与后端开发,著有书籍《通用源码阅读指导书》《高性能架构之道》等。
本书以开源软件MyBatis的源码为例,讲述程序源码阅读的流程、方法、技巧。本书先介绍MyBatis的发展背景与使用方法让读者对MyBatis建立概括性的认识,继而逐步深入剖析MyBatis的源码。并在剖析MyBatis源码的过程讲述源码中所涉及到的编程语言知识、设计模式、架构技巧。*终使得读者在详细了解MyBatis源码的同时掌握源码阅读的基本能力。
第1篇 背景介绍
第1章 源码阅读 2
1.1 源码阅读的意义 2
1.2 源码阅读的方法 2
1.3 开源软件 3
1.4 MyBatis源码 4
1.5 本书结构 5
1.5.1 背景知识 5
1.5.2 文件的指代 5
1.5.3 方法的指代 8
第2章 MyBatis概述 10
2.1 背景介绍 10
2.1.1 传统数据库连接 10
2.1.2 ORM框架 11
2.1.3 MyBatis的特点 12
2.2 快速上手 12
2.2.1 MyBatis包的引入 14
2.2.2 MyBatis的简单配置 15
2.2.3 基于MyBatis的数据库操作 16
2.3 MyBatis的核心功能分析 17
第3章 MyBatis运行初探 20
3.1 初始化阶段追踪 23
3.1.1 静态代码块的执行 23
3.1.2 获取InputStream 24
3.1.3 配置信息读取 25
3.1.4 总结 27
3.2 数据读写阶段追踪 27
3.2.1 获得SqlSession 27
3.2.2 映射接口文件与映射文件的绑定 28
3.2.3 映射接口的代理 28
3.2.4 SQL语句的查找 31
3.2.5 查询结果缓存 31
3.2.6 数据库查询 33
3.2.7 处理结果集 36
3.2.8 总结 39
第4章 MyBatis源码结构概述 40
4.1 包结构 40
4.2 分组结构 40
第2篇 基础功能包源码阅读
第5章 exceptions包 44
5.1 背景知识 44
5.1.1 Java的异常 44
5.1.2 序列化与反序列化 45
5.2 Exception类 46
5.3 ExceptionFactory类 47
第6章 reflection包 48
6.1 背景知识 48
6.1.1 装饰器模式 48
6.1.2 反射 50
6.1.3 Type接口及其子类 54
6.2 对象工厂子包 55
6.3 执行器子包 57
6.4 属性子包 59
6.5 对象包装器子包 61
6.6 反射核心类 62
6.7 反射包装类 65
6.8 异常拆包工具 65
6.9 参数名解析器 68
6.10 泛型解析器 69
第7章 annotations包与lang包 76
7.1 Java注解详解 76
7.2 Param注解分析 78
第8章 type包 81
8.1 模板模式 82
8.2 类型处理器 83
8.2.1 类型处理器的基类与实现类 83
8.2.2 TypeReference类 85
8.3 类型注册表 86
第9章 io包 89
9.1 背景知识 89
9.1.1 单例模式 89
9.1.2 代理模式 89
9.1.3 静态代理 90
9.1.4 VFS 92
9.2 VFS实现类 92
9.2.1 DefaultVFS类 94
9.2.2 JBoss6VFS类 94
9.3 类文件的加载 96
9.4 ResolverUtil类 97
第10章 logging包 100
10.1 背景知识 100
10.1.1 适配器模式 100
10.1.2 日志框架与日志级别 102
10.1.3 基于反射的动态代理 103
10.2 Log接口 105
10.3 Log接口的实现类 107
10.4 LogFactory 108
10.5 JDBC日志打印 109
第11章 parsing包 113
11.1 背景知识 113
11.1.1 XML文件 113
11.1.2 XPath 115
11.2 XML解析 116
11.3 文档解析中的变量替换 118
第3篇 配置解析包源码阅读
第12章 配置解析概述 124
第13章 binding包 128
13.1 数据库操作的接入 128
13.1.1 数据库操作的方法化 129
13.1.2 数据库操作方法的接入 133
13.2 抽象方法与数据库操作节点的关联 134
13.3 数据库操作接入总结 136
13.3.1 初始化阶段 136
13.3.2 数据读写阶段 137
13.4 MyBatis与Spring、Spring Boot的整合 137
第14章 builder包 139
14.1 建造者模式 139
14.2 建造者基类与工具类 142
14.3 SqlSourceBuilder类与StaticSqlSource类 143
14.4 CacheRefResolver类和ResultMapResolver类 145
14.4.1 CacheRefResolver类 145
14.4.2 ResultMapResolver类 146
14.5 ParameterExpression类 148
14.6 XML文件解析 149
14.6.1 XML文件的声明解析 150
14.6.2 配置文件解析 151
14.6.3 数据库操作语句解析 153
14.6.4 Statement解析 155
14.6.5 引用解析 157
14.7 注解映射的解析 159
14.7.1 注解映射的使用 159
14.7.2 注解映射解析的触发 160
14.7.3 直接注解映射的解析 164
14.7.4 间接注解映射的解析 164
第15章 mapping包 169
15.1 SQL语句处理功能 169
15.1.1 MappedStatement类 169
15.1.2 SqlSource类 170
15.1.3 BoundSql 171
15.2 输出结果处理功能 171
15.2.1 ResultMap类 172
15.2.2 ResultMapping类 173
15.2.3 Discriminator 174
15.3 输入参数处理功能 176
15.4 多数据库种类处理功能 176
15.5 其他功能 178
第16章 scripting包 179
16.1 OGNL 179
16.2 语言驱动接口及语言驱动注册表 183
16.3 SQL节点树的组建 186
16.4 SQL节点树的解析 189
16.4.1 OGNL辅助类 189
16.4.2 表达式求值器 193
16.4.3 动态上下文 194
16.4.4 SQL节点及其解析 196
16.5 再论SqlSource 202
16.5.1 SqlSource的生成 202
16.5.2 DynamicSqlSource的转化 205
16.5.3 RawSqlSource的转化 206
16.5.4 SqlSource接口的实现类总结 207
第17章 datasource包 208
17.1 背景知识 208
17.1.1 java.sql包和javax.sql包 208
17.1.2 DriverManager 209
17.1.3 DataSource 209
17.1.4 Connection 210
17.1.5 Statement 211
17.2 数据源工厂接口 211
17.3 JNDI数据源工厂 213
17.4 非池化数据源及工厂 214
17.4.1 非池化数据源工厂 214
17.4.2 非池化数据源 216
17.5 池化数据源 218
17.5.1 池化数据源类的属性 218
17.5.2 池化连接的给出与收回 220
17.5.3 池化连接 228
17.6 论数据源工厂 229
第4篇 核心操作包源码阅读
第18章 jdbc包 232
18.1 AbstractSQL类与SQL类 232
18.1.1 SafeAppendable内部类 232
18.1.2 SQLStatement内部类 233
18.1.3 AbstractSQL类 235
18.1.4 SQL类 236
18.2 SqlRunner类 237
18.3 ScriptRunner类 240
18.4 jdbc包的独立性 241
第19章 cache包 243
19.1 背景知识 243
19.1.1 Java对象的引用级别 243
19.1.2 ReferenceQueue类 244
19.2 cache包结构与Cache接口 247
19.3 缓存键 248
19.3.1 缓存键的原理 248
19.3.2 缓存键的生成 251
19.4 缓存的实现类 252
19.5 缓存装饰器 252
19.5.1 同步装饰器 253
19.5.2 日志装饰器 253
19.5.3 清理装饰器 254
19.5.4 阻塞装饰器 259
19.5.5 定时清理装饰器 262
19.5.6 序列化装饰器 263
19.6 缓存的组建 264
19.7 事务缓存 267
19.8 MyBatis缓存机制 271
19.8.1 一级缓存 271
19.8.2 二级缓存 274
19.8.3 两级缓存机制 277
第20章 transaction包 279
20.1 事务概述 279
20.2 事务接口及工厂 280
20.3 JDBC事务 282
20.4 容器事务 283
第21章 cursor包 284
21.1 Iterable接口与Iterator接口 284
21.2 MyBatis中游标的使用 285
21.3 游标接口 285
21.4 默认游标 286
21.4.1 CursorStatus内部类 287
21.4.2 ObjectWrapperResultHandler内部类 287
21.4.3 CursorIterator内部类 288
21.4.4 DefaultCursor外部类 289
第22章 executor包 293
22.1 背景知识 293
22.1.1 基于cglib的动态代理 293
22.1.2 javassist框架的使用 295
22.1.3 序列化与反序列化中的方法 296
22.1.4 ThreadLocal 302
22.1.5 存储过程 305
22.1.6 Statement及其子接口 306
22.2 主键自增功能 308
22.2.1 主键自增的配置与生效 308
22.2.2 Jdbc3KeyGenerator类 310
22.2.3 SelectKeyGenerator类 312
22.3 懒加载功能 316
22.3.1 懒加载功能的使用 316
22.3.2 懒加载功能的实现 318
22.3.3 懒加载功能对序列化和反序列化的支持 325
22.4 语句处理功能 329
22.4.1 MyBatis对多语句类型的支持 329
22.4.2 MyBatis的语句处理功能 331
22.5 参数处理功能 333
22.6 结果处理功能 334
22.7 结果集处理功能 336
22.7.1 MyBatis中多结果集的处理 337
22.7.2 结果集封装类 340
22.7.3 结果集处理器 341
22.8 执行器 347
22.8.1 执行器接口 348
22.8.2 执行器基类与实现类 348
22.9 错误上下文 352
第23章 session包 355
23.1 SqlSession及其相关类 355
23.1.1 SqlSession的生成链 356
23.1.2 DefaultSqlSession类 357
23.1.3 SqlSessionManager类 358
23.2 Configuration类 361
23.3 其他类 364
第24章 plugin包 366
24.1 责任链模式 366
24.2 MyBatis插件开发 368
24.3 MyBatis拦截器平台 370
24.4 MyBatis拦截器链与拦截点 373
第5篇 总结与展望
第25章 源码阅读总结 378
25.1 前期准备 378
25.1.1 工具准备 378
25.1.2 项目选择 378
25.1.3 项目使用 379
25.2 项目初探 379
25.3 源码阅读 380
25.3.1 模块分析 380
25.3.2 模块归类 380
25.3.3 自底向上 380
25.3.4 合理猜测 381
25.3.5 类比阅读 381
25.3.6 善于汇总 381
25.3.7 网格阅读 382
第26章 优秀开源项目推荐 383
26.1 Guava 383
26.2 Tomcat 384
26.3 Redis 384
26.4 Dubbo 385
26.5 React 385
^ 收 起
第1章 源码阅读 2
1.1 源码阅读的意义 2
1.2 源码阅读的方法 2
1.3 开源软件 3
1.4 MyBatis源码 4
1.5 本书结构 5
1.5.1 背景知识 5
1.5.2 文件的指代 5
1.5.3 方法的指代 8
第2章 MyBatis概述 10
2.1 背景介绍 10
2.1.1 传统数据库连接 10
2.1.2 ORM框架 11
2.1.3 MyBatis的特点 12
2.2 快速上手 12
2.2.1 MyBatis包的引入 14
2.2.2 MyBatis的简单配置 15
2.2.3 基于MyBatis的数据库操作 16
2.3 MyBatis的核心功能分析 17
第3章 MyBatis运行初探 20
3.1 初始化阶段追踪 23
3.1.1 静态代码块的执行 23
3.1.2 获取InputStream 24
3.1.3 配置信息读取 25
3.1.4 总结 27
3.2 数据读写阶段追踪 27
3.2.1 获得SqlSession 27
3.2.2 映射接口文件与映射文件的绑定 28
3.2.3 映射接口的代理 28
3.2.4 SQL语句的查找 31
3.2.5 查询结果缓存 31
3.2.6 数据库查询 33
3.2.7 处理结果集 36
3.2.8 总结 39
第4章 MyBatis源码结构概述 40
4.1 包结构 40
4.2 分组结构 40
第2篇 基础功能包源码阅读
第5章 exceptions包 44
5.1 背景知识 44
5.1.1 Java的异常 44
5.1.2 序列化与反序列化 45
5.2 Exception类 46
5.3 ExceptionFactory类 47
第6章 reflection包 48
6.1 背景知识 48
6.1.1 装饰器模式 48
6.1.2 反射 50
6.1.3 Type接口及其子类 54
6.2 对象工厂子包 55
6.3 执行器子包 57
6.4 属性子包 59
6.5 对象包装器子包 61
6.6 反射核心类 62
6.7 反射包装类 65
6.8 异常拆包工具 65
6.9 参数名解析器 68
6.10 泛型解析器 69
第7章 annotations包与lang包 76
7.1 Java注解详解 76
7.2 Param注解分析 78
第8章 type包 81
8.1 模板模式 82
8.2 类型处理器 83
8.2.1 类型处理器的基类与实现类 83
8.2.2 TypeReference类 85
8.3 类型注册表 86
第9章 io包 89
9.1 背景知识 89
9.1.1 单例模式 89
9.1.2 代理模式 89
9.1.3 静态代理 90
9.1.4 VFS 92
9.2 VFS实现类 92
9.2.1 DefaultVFS类 94
9.2.2 JBoss6VFS类 94
9.3 类文件的加载 96
9.4 ResolverUtil类 97
第10章 logging包 100
10.1 背景知识 100
10.1.1 适配器模式 100
10.1.2 日志框架与日志级别 102
10.1.3 基于反射的动态代理 103
10.2 Log接口 105
10.3 Log接口的实现类 107
10.4 LogFactory 108
10.5 JDBC日志打印 109
第11章 parsing包 113
11.1 背景知识 113
11.1.1 XML文件 113
11.1.2 XPath 115
11.2 XML解析 116
11.3 文档解析中的变量替换 118
第3篇 配置解析包源码阅读
第12章 配置解析概述 124
第13章 binding包 128
13.1 数据库操作的接入 128
13.1.1 数据库操作的方法化 129
13.1.2 数据库操作方法的接入 133
13.2 抽象方法与数据库操作节点的关联 134
13.3 数据库操作接入总结 136
13.3.1 初始化阶段 136
13.3.2 数据读写阶段 137
13.4 MyBatis与Spring、Spring Boot的整合 137
第14章 builder包 139
14.1 建造者模式 139
14.2 建造者基类与工具类 142
14.3 SqlSourceBuilder类与StaticSqlSource类 143
14.4 CacheRefResolver类和ResultMapResolver类 145
14.4.1 CacheRefResolver类 145
14.4.2 ResultMapResolver类 146
14.5 ParameterExpression类 148
14.6 XML文件解析 149
14.6.1 XML文件的声明解析 150
14.6.2 配置文件解析 151
14.6.3 数据库操作语句解析 153
14.6.4 Statement解析 155
14.6.5 引用解析 157
14.7 注解映射的解析 159
14.7.1 注解映射的使用 159
14.7.2 注解映射解析的触发 160
14.7.3 直接注解映射的解析 164
14.7.4 间接注解映射的解析 164
第15章 mapping包 169
15.1 SQL语句处理功能 169
15.1.1 MappedStatement类 169
15.1.2 SqlSource类 170
15.1.3 BoundSql 171
15.2 输出结果处理功能 171
15.2.1 ResultMap类 172
15.2.2 ResultMapping类 173
15.2.3 Discriminator 174
15.3 输入参数处理功能 176
15.4 多数据库种类处理功能 176
15.5 其他功能 178
第16章 scripting包 179
16.1 OGNL 179
16.2 语言驱动接口及语言驱动注册表 183
16.3 SQL节点树的组建 186
16.4 SQL节点树的解析 189
16.4.1 OGNL辅助类 189
16.4.2 表达式求值器 193
16.4.3 动态上下文 194
16.4.4 SQL节点及其解析 196
16.5 再论SqlSource 202
16.5.1 SqlSource的生成 202
16.5.2 DynamicSqlSource的转化 205
16.5.3 RawSqlSource的转化 206
16.5.4 SqlSource接口的实现类总结 207
第17章 datasource包 208
17.1 背景知识 208
17.1.1 java.sql包和javax.sql包 208
17.1.2 DriverManager 209
17.1.3 DataSource 209
17.1.4 Connection 210
17.1.5 Statement 211
17.2 数据源工厂接口 211
17.3 JNDI数据源工厂 213
17.4 非池化数据源及工厂 214
17.4.1 非池化数据源工厂 214
17.4.2 非池化数据源 216
17.5 池化数据源 218
17.5.1 池化数据源类的属性 218
17.5.2 池化连接的给出与收回 220
17.5.3 池化连接 228
17.6 论数据源工厂 229
第4篇 核心操作包源码阅读
第18章 jdbc包 232
18.1 AbstractSQL类与SQL类 232
18.1.1 SafeAppendable内部类 232
18.1.2 SQLStatement内部类 233
18.1.3 AbstractSQL类 235
18.1.4 SQL类 236
18.2 SqlRunner类 237
18.3 ScriptRunner类 240
18.4 jdbc包的独立性 241
第19章 cache包 243
19.1 背景知识 243
19.1.1 Java对象的引用级别 243
19.1.2 ReferenceQueue类 244
19.2 cache包结构与Cache接口 247
19.3 缓存键 248
19.3.1 缓存键的原理 248
19.3.2 缓存键的生成 251
19.4 缓存的实现类 252
19.5 缓存装饰器 252
19.5.1 同步装饰器 253
19.5.2 日志装饰器 253
19.5.3 清理装饰器 254
19.5.4 阻塞装饰器 259
19.5.5 定时清理装饰器 262
19.5.6 序列化装饰器 263
19.6 缓存的组建 264
19.7 事务缓存 267
19.8 MyBatis缓存机制 271
19.8.1 一级缓存 271
19.8.2 二级缓存 274
19.8.3 两级缓存机制 277
第20章 transaction包 279
20.1 事务概述 279
20.2 事务接口及工厂 280
20.3 JDBC事务 282
20.4 容器事务 283
第21章 cursor包 284
21.1 Iterable接口与Iterator接口 284
21.2 MyBatis中游标的使用 285
21.3 游标接口 285
21.4 默认游标 286
21.4.1 CursorStatus内部类 287
21.4.2 ObjectWrapperResultHandler内部类 287
21.4.3 CursorIterator内部类 288
21.4.4 DefaultCursor外部类 289
第22章 executor包 293
22.1 背景知识 293
22.1.1 基于cglib的动态代理 293
22.1.2 javassist框架的使用 295
22.1.3 序列化与反序列化中的方法 296
22.1.4 ThreadLocal 302
22.1.5 存储过程 305
22.1.6 Statement及其子接口 306
22.2 主键自增功能 308
22.2.1 主键自增的配置与生效 308
22.2.2 Jdbc3KeyGenerator类 310
22.2.3 SelectKeyGenerator类 312
22.3 懒加载功能 316
22.3.1 懒加载功能的使用 316
22.3.2 懒加载功能的实现 318
22.3.3 懒加载功能对序列化和反序列化的支持 325
22.4 语句处理功能 329
22.4.1 MyBatis对多语句类型的支持 329
22.4.2 MyBatis的语句处理功能 331
22.5 参数处理功能 333
22.6 结果处理功能 334
22.7 结果集处理功能 336
22.7.1 MyBatis中多结果集的处理 337
22.7.2 结果集封装类 340
22.7.3 结果集处理器 341
22.8 执行器 347
22.8.1 执行器接口 348
22.8.2 执行器基类与实现类 348
22.9 错误上下文 352
第23章 session包 355
23.1 SqlSession及其相关类 355
23.1.1 SqlSession的生成链 356
23.1.2 DefaultSqlSession类 357
23.1.3 SqlSessionManager类 358
23.2 Configuration类 361
23.3 其他类 364
第24章 plugin包 366
24.1 责任链模式 366
24.2 MyBatis插件开发 368
24.3 MyBatis拦截器平台 370
24.4 MyBatis拦截器链与拦截点 373
第5篇 总结与展望
第25章 源码阅读总结 378
25.1 前期准备 378
25.1.1 工具准备 378
25.1.2 项目选择 378
25.1.3 项目使用 379
25.2 项目初探 379
25.3 源码阅读 380
25.3.1 模块分析 380
25.3.2 模块归类 380
25.3.3 自底向上 380
25.3.4 合理猜测 381
25.3.5 类比阅读 381
25.3.6 善于汇总 381
25.3.7 网格阅读 382
第26章 优秀开源项目推荐 383
26.1 Guava 383
26.2 Tomcat 384
26.3 Redis 384
26.4 Dubbo 385
26.5 React 385
^ 收 起
易哥,毕业于浙江大学、山东大学,高级软件系统架构师、网络工程师、数据库工程师、软件测试工程师、注册电气工程师。在校成绩前1%,获得国家奖学金两次,一等奖学金四次,科技创新大赛一等奖三次,以及五四青年科学奖等。主要科研方向为机器学习、分布式算法、容错算法在无线传感网络中的应用,相关论文获得IEEE通信协会论文奖。曾担任网站技术部门负责人,具有丰富的互联网开发经验。先后设计和实现了众多系统和平台,也是活跃的开源开发者。现专注软件系统架构设计与后端开发,著有书籍《通用源码阅读指导书》《高性能架构之道》等。
本书以开源软件MyBatis的源码为例,讲述程序源码阅读的流程、方法、技巧。本书先介绍MyBatis的发展背景与使用方法让读者对MyBatis建立概括性的认识,继而逐步深入剖析MyBatis的源码。并在剖析MyBatis源码的过程讲述源码中所涉及到的编程语言知识、设计模式、架构技巧。*终使得读者在详细了解MyBatis源码的同时掌握源码阅读的基本能力。
比价列表