第1篇 MyBatis 3源码
第1章 搭建MyBatis源码环境 3
: S; C1 s- e9 J# i( q( ]1.1 MYBATIS 3简介 3% |" U4 B: _5 a, W; u, M) E
1.2 环境准备 4
1 v0 f# h7 j6 c1.3 获取MYBATIS源码 41 k1 `! L; N( D4 x* S
1.4 导入MYBATIS源码到IDE 6% x9 V8 ]& o; ]5 }$ U" y
1.5 HSQLDB数据库简介 94 S% o2 _3 ]4 z+ G/ M
1.6 本章小结 11
/ C7 G2 h' o3 X* F: O第2章 JDBC规范详解 133 }5 Z# f& q7 p v: Z8 c: K6 L( z+ k
2.1 JDBC API简介 13' F+ z- _! L% i8 ~; _& ^9 u+ C6 r, p+ L
2.1.1 建立数据源连接 14# O0 \- {/ B z- `
2.1.2 执行SQL语句 15, r; T1 H5 }; ? V. W# l. I
2.1.3 处理SQL执行结果 162 v' j, |& r3 Q* q( Q" W" Y
2.1.4 使用JDBC操作数据库 16
, {1 x, y7 w; \" I" u9 J! A2.2 JDBC API中的类与接口 17/ s: U- j1 W0 ?9 X- @
2.2.1 java.sql包详解 17/ ]6 {, E+ q {7 {
2.2.2 javax.sql包详解 20
% z+ Z6 j! y( M' r R- G0 }2.3 CONNECTION详解 24' x5 v" @# q" T0 F. a$ O7 h
2.3.1 JDBC驱动类型 24 S: e$ [7 ], B5 g; I
2.3.2 java.sql.Driver接口 26
4 K. T) y- A* V6 X& z0 @$ f2.3.3 Java SPI机制简介 27
, c1 U' S( p0 D" k+ I2.3.4 java.sql.DriverAction接口 29# G4 U5 c& g8 F) w$ w
2.3.5 java.sql.DriverManager类 29
# x' e) N3 \; N2.3.6 javax.sql.DataSource接口 31
2 s- h# \8 J7 ^ T2.3.7 使用JNDI API增强应用的可移植性 32/ w, H* Y7 y; T
2.3.8 关闭Connection对象 34
( D$ B7 z4 P0 E( Z- W. U: X2.4 STATEMENT详解 35
7 Y _4 n) X9 r2.4.1 java.sql.Statement接口 35% Y5 F' w3 m/ X! [4 C
2.4.2 java.sql.PreparedStatement接口 39& Y$ x# |' I- t: i2 g" [
2.4.3 java.sql.CallableStatement接口 43& U$ Y, p! G" F! X( Q! n+ o; t( o7 h
2.4.4 获取自增长的键值 445 V2 S( Y6 Z5 y" K! E- @% `
2.5 RESULTSET详解 45' y) e" B; e) s- \* v* Z
2.5.1 ResultSet类型 45
2 {* r7 Q, c6 S: l! @2.5.2 ResultSet并行性 469 L. m* v) L& T9 j, W) k! K
2.5.3 ResultSet可保持性 46
" F4 X- q6 H9 n4 k2.5.4 ResultSet属性设置 47$ i* }4 Y8 ?- ?; P
2.5.5 ResultSet游标移动 47/ j% h9 b2 L: K# C# K+ ^
2.5.6 修改ResultSet对象 48
* N; F3 t# |% s h0 \ j2.5.7 关闭ResultSet对象 505 ?9 H. u" h+ x) I: g" D
2.6 DATABASEMETADATA详解 51. j& e/ X) K5 ^6 C
2.6.1 创建DatabaseMetaData对象 51/ |+ F% M# }9 A0 C ^' l+ [5 [
2.6.2 获取数据源的基本信息 51. n. b. H. P" [2 r4 |4 X
2.6.3 获取数据源支持特性 53
! X, ^* l8 f" S6 k; `" l5 L9 c( `2.6.4 获取数据源限制 53
; F' N& D7 |/ ]8 X, O) f4 T0 `2.6.5 获取SQL对象及属性 548 G% ^% B( P$ z8 m3 l# V
2.6.6 获取事务支持 54
+ W# k6 ]& g W9 }0 S2 A# F2.7 JDBC事务 54
! [5 o4 S: J6 z; v Z+ p) w- N' j+ r0 w2.7.1 事务边界与自动提交 55
6 j& y+ Z3 W5 x/ T: N# K1 L2 ^2.7.2 事务隔离级别 55# R" @/ P v: B6 T0 a: }% W
2.7.3 事务中的保存点 56
$ [) f) ?1 N8 e! M3 U+ H2 Y4 m8 ^2.8 本章小结 57
1 | @) ^* ~3 P2 R+ x第3章 MyBatis常用工具类 58
) G" S, I6 O7 l3.1 使用SQL类生成语句 58
$ e" x( h$ X* V8 R3.2 使用SCRIPTRUNNER执行脚本 64( e* @0 {8 f4 s$ Q# M
3.3 使用SQLRUNNER操作数据库 67
' p* K0 d% I X! X$ W/ r3.4 METAOBJECT详解 71
1 v3 R9 R5 C, k! `; D# b5 q3.5 METACLASS详解 728 p0 M0 q4 n$ G- r) x4 ^6 B
3.6 OBJECTFACTORY详解 73% c1 t9 G# [8 o: Z0 _1 V
3.7 PROXYFACTORY详解 74$ f; c0 D3 R) _* V- D. i' ^
3.8 本章小结 75
; d) _% ~1 p+ c8 w2 N% j第4章 MyBatis核心组件介绍 760 r k/ z1 |% \$ b( m8 y$ [ A
4.1 使用MYBATIS操作数据库 76; o# N% T3 z2 q9 t( X
4.2 MYBATIS核心组件 80+ q6 C% |. ^* t" k/ P; x
4.3 CONFIGURATION详解 82
) I) Q! o8 E5 D7 W( w: o3 v$ L& D. C" o4.4 EXECUTOR详解 88) C% _% X5 i4 T; H
4.5 MAPPEDSTATEMENT详解 90
3 |6 `% y% Q* l# ~( E4.6 STATEMENTHANDLER详解 92+ i; \' {3 I5 N2 Z* Z5 l* V
4.7 TYPEHANDLER详解 94; w7 R. V; C# w5 b- L- W
4.8 PARAMETERHANDLER详解 97
5 }- W. ]0 p( ?9 I" i8 N6 k0 H4.9 RESULTSETHANDLER详解 98
0 w4 L" v) d/ h* V2 f4.10 本章小结 100( V; |8 Q0 l; `# w1 {* q
第5章 SqlSession的创建过程 1019 V! N/ }* ^2 G/ E
5.1 XPATH方式解析XML文件 101% e) {' V5 P, E4 y. k
5.2 CONFIGURATION实例创建过程 1043 l* Z' s* b/ N$ g7 B
5.3 SQLSESSION实例创建过程 108
' h+ S% w# ~! o% o3 a5.4 本章小结 109( N, |8 {9 ^" o
第6章 SqlSession执行Mapper过程 110, Q4 O6 E6 L6 n0 e* C
6.1 MAPPER接口的注册过程 110
, L$ l' }: l( O; n# o1 T! A. Q+ J5 g6.2 MAPPEDSTATEMENT注册过程 114
- i' V0 G, j& \6.3 MAPPER方法调用过程详解 1197 z& S+ z5 S( A
6.4 SQLSESSION执行MAPPER过程 1261 [5 x4 A1 [* G" G) x
6.5 本章小结 130
javazx.com* y0 L. `# ^- \* g- F! V( n2 S
第7章 MyBatis缓存 131
/ r# V6 y! F4 q6 v& u; {; A: N" }7.1 MYBATIS缓存的使用 131 x& g6 K* c9 c
7.2 MYBATIS缓存实现类 132
6 n8 `8 M7 l+ |% W7 d: |9 _7.3 MYBATIS一级缓存实现原理 135
@" B* U/ t& w3 u7.4 MYBATIS二级缓存实现原理 138
6 u( P( k6 H3 {9 V. v* Y3 E( Z7.5 MYBATIS使用REDIS缓存 142
; `' O' x8 A1 w& h7.6 本章小结 145
- W1 x6 q# @; f第8章 MyBatis日志实现 146
2 t+ I( Y _8 H" E% G4 K! u; U8.1 JAVA日志体系 146
& Y g$ }- ^! \; v8.2 MYBATIS日志实现 149& W7 N# k" e# ^) e; Q
8.3 本章小结 155/ G' C9 Y: @/ B) @
第9章 动态SQL实现原理 156
% o" O9 ]7 T4 V" y5 p" }% E9.1 动态SQL的使用 156
( Y' D) Y8 k3 L) ^$ y3 V+ ^' r0 N+ M9.2 SQLSOURCE与BOUNDSQL详解 159
2 e8 n3 y3 n2 g" E9 b8 D9.3 LANGUAGEDRIVER详解 1618 s4 h$ n+ K/ u2 M& F/ h( y$ p+ b$ i4 H7 A
9.4 SQLNODE详解 164
5 c+ j, D; Z) W( z/ L# |6 m% ?9.5 动态SQL解析过程 169
( @7 g: r+ ] B9.6 从源码角度分析#{}和${}的区别 1790 U0 y: ?$ _1 [: A% `
9.7 本章小结 182
& x7 }1 `' R& ]+ {* y. O& ]9 t6 g8 z第10章 MyBatis插件原理及应用 184
) v4 N$ M6 c, p8 f10.1 MYBATIS插件实现原理 184
+ E' M& D0 {" ]; V3 s10.2 自定义一个分页插件 193. y" ^3 j2 t4 i- }
10.3 自定义慢SQL统计插件 1984 e6 D3 M! L6 Z( \+ j- a7 N3 f8 k
10.4 本章小结 200
& A& n3 M) u) U- Z6 ^0 } h- G第11章 MyBatis级联映射与懒加载 201
# Z4 I5 l" Q# |2 \+ }+ Y- r11.1 MYBATIS级联映射详解 201
0 ^5 U9 t2 H# H8 J. \11.1.1 准备工作 201
; a, a7 N6 `3 L11.1.2 一对多关联映射 205
. y9 b9 `" C( A6 \$ @7 J7 A11.1.3 一对一关联映射 206
. A n$ O2 \ t1 `6 o11.1.4 Discriminator详解 209, b8 O3 O# ?0 Q6 O
11.2 MYBATIS懒加载机制 210
' n% \& t: b: i6 a- G11.3 MYBATIS级联映射实现原理 2128 x6 E% [* N# }8 H8 w
11.3.1 ResultMap详解 212- y5 ]3 z; j' X3 O) }
11.3.2 ResultMap解析过程 213
- o8 z. j \% k6 `11.3.3 级联映射实现原理 218- }5 q6 G. u1 [3 N/ |. r
11.4 懒加载实现原理 2255 t5 a! w/ e7 w0 Q& e
11.5 本章小结 230
第2篇 MyBatis Spring源码
第12章 MyBatis与Spring整合案例 233
. c# k# ^) B2 A& ]12.1 准备工作 233" }: _- ~8 V& g' L) Y( w; s
12.2 MYBATIS与SPRING整合 234
0 R# Z F% J: ?12.3 用户注册案例 236
7 Y1 m. k1 k4 p12.4 本章小结 239
5 H5 w( \ g* ]! X! v: Q第13章 MyBatis Spring的实现原理 240
8 G2 L* |7 ~, p4 r13.1 SPRING中的一些概念 2405 i4 k5 M, _6 K' B {) \$ ?/ g
13.2 SPRING容器启动过程 243
# P8 ~( M. g4 Z5 G. ]" k13.3 MAPPER动态代理对象注册过程 2443 Q' ]7 f/ A7 `# c+ ?
13.4 MYBATIS整合SPRING事务管理 248
g4 d& _) F& W8 G( O13.5 本章小结 253