kidfolk / MyBatisDemo

书籍《通用源码阅读指导书——MyBatis源码详解》配套示例

Home Page:http://yeecode.top

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MyBatisDemo

该项目是《通用源码阅读指导书——MyBatis源码详解》书籍的配套示例。


《通用源码阅读指导书——MyBatis源码详解》是一本以MyBatis源码为材料,详细介绍源码阅读相关方法和技巧的源码阅读指导书籍。

《通用源码阅读指导书——MyBatis源码详解》以MyBatis源码中的包为单位,详细和透彻地介绍每个类的源码,包括其背景知识、组织方式、逻辑结构、实现细节。在的讲解中,本书不漏过每一个类,不跳过每一个难点,做到深浅一致。在阅读MyBatis源码的过程中,本书使用了运行初探、模块归类、合理猜测、类比阅读、网格阅读等许多源码阅读方法。最后,本书对这些源码阅读方法进行了进一步的总结整理。

《通用源码阅读指导书——MyBatis源码详解》适合想要开展源码阅读的开发者、想要借鉴优秀设计的开发者、想要深入了解MyBatis原理的开发者。阅读本书,能让读者在详细了解MyBatis源码的基础上提升自己的源码阅读能力、系统架构能力、软件开发能力。

书籍购买地址: 京东 | 淘宝


该项目包含29个示例,涉及MyBatis功能使用示例、MyBatis源码相关知识等。在使用该示例前,需先用datasource文件夹下的文件初始化两个数据表,并建立好数据库连接。

示例项目如下:

示例1

不使用ORM框架的数据库读写操作示例。

示例2

通过mybatis-spring-boot-starter整合了MyBatis的Spring Boot后端项目示例。

示例3

最简单的整合的MyBatis的Spring Boot项目示例。

示例4

装饰器模式示例。

示例5

反射功能示例。

示例6

TypeParameterResolver类的功能示例。

示例7

模板模式Demo。

示例8

静态代理示例。

示例9

基于反射的动态代理示例。

示例10

使用XPath解析XML文档的示例。

示例11

配置文件最为全面的MyBatis查询项目。但由于需要配置项互斥,因此该项目仅用于进行配置项的展示,不可运行。

示例12

建造者模式示例。

示例13

一个较为全面的MyBaits配置文件、映射文件示例。其中包含了:resultMap标签的继承示例、数据库操作节点中的include节点示例、resultMap节点中的discriminator节点示例、resultMap节点中的各类ResultMappings节点示例。

示例14

基于注解的MyBatis项目示例。

注意:该项目启动后会提供Server服务,需要访问http://127.0.0.1:8099/user/test/进行测试。

示例15

OGNL演示示例。

示例16

MyBaits使用SqlRunner直接执行SQL语句示例,使用ScriptRunner直接执行SQL脚本示例。

示例17

强引用、软引用、弱引用的示例,以及ReferenceQueue示例。

示例18

游标使用示例。

示例19

基于cglib的动态代理示例。

示例20

javassist的使用示例。

示例21

序列化与反序列化示例,包括writeExternal方法和readExternal方法示例、writeReplace方法和readResolve方法示例。

示例22

ThreadLocal示例。

示例23

主键自动生成示例。

示例24

懒加载示例。

示例25

MyBatis多种SQL语句类型示例,包括STATEMENT、PREPARED、CALLABLE三种类型语句的示例。

示例26

多结果集的返回与处理示例。

示例27

责任链模式示例。

示例28

MyBaits插件开发示例。

示例29

Guava使用示例。


本项目是《通用源码阅读指导书——MyBatis源码详解》的配套开源项目。

《通用源码阅读指导书——MyBatis源码详解》以MyBatis源码中的包为单位,详细和透彻地介绍每个类的源码,包括其背景知识、组织方式、逻辑结构、实现细节。在本书的讲解中,不漏过每一个类,不跳过每一个难点,做到深浅一致。在阅读MyBatis源码的过程中,本书使用了运行初探、模块归类、合理猜测、类比阅读、网格阅读等许多源码阅读方法,并对这些源码阅读方法进行了进一步的总结整理。

本书适合架构师、程序员提升自己的源码阅读能力、系统架构能力、软件开发能力,也有助于产品经理、测试人员、运维人员等从业者了解软件架构细节。

书籍购买地址: 京东 | 淘宝

书籍介绍

书籍购买地址: 京东 | 淘宝

书籍目录:

  • 前言
  • 【模块 一】背景介绍
  • 1 源码阅读
    • 1.1 源码阅读的意义
    • 1.2 源码阅读的方法
    • 1.3 开源软件
    • 1.4 MyBatis源码
    • 1.5 本书结构
      • 1.5.1 背景知识
      • 1.5.2 文件的指代
      • 1.5.3 方法的指代
  • 2 MyBatis概述
    • 2.1 背景介绍
      • 2.1.1 传统数据库连接
      • 2.1.2 ORM框架
      • 2.1.3 MyBatis特点
    • 2.2 快速上手
      • 2.2.1 MyBatis包的引入
      • 2.2.2 MyBatis的简单配置
      • 2.2.3 基于MyBatis的数据库操作
    • 2.3 MyBatis的核心功能分析
  • 3 MyBatis运行初探
    • 3.1 初始化阶段追踪
      • 3.1.1 静态代码块的执行
      • 3.1.2 获取InputStream
      • 3.1.3 配置信息读取
      • 3.1.4 总结
    • 3.2 数据读写阶段追踪
      • 3.2.1 获得SqlSession
      • 3.2.2 映射接口文件与映射文件的绑定
      • 3.2.3 映射接口的代理
      • 3.2.4 SQL语句的查找
      • 3.2.5 查询结果缓存
      • 3.2.6 数据库查询
      • 3.2.7 处理结果集
      • 3.2.8 总结
  • 4 MyBatis源码结构概述
    • 4.1 包结构
    • 4.2 分组结构
  • 【模块 二】基础功能包源码阅读
  • 5 exceptions包
    • 5.1 背景知识
      • 5.1.1 Java的异常
      • 5.1.2 序列化与反序列化
    • 5.2 Exception类
    • 5.3 ExceptionFactory类
  • 6 reflection包
    • 6.1 背景知识
      • 6.1.1 装饰器模式
      • 6.1.2 反射
      • 6.1.3 Type接口及其子类
    • 6.2 对象工厂子包
    • 6.3 执行器子包
    • 6.4 属性子包
    • 6.5 对象包装器子包
    • 6.6 反射核心类
    • 6.7 反射包装类
    • 6.8 异常拆包工具
    • 6.9 参数名解析器
    • 6.10 泛型解析器
  • 7 annotations包与lang包
    • 7.1 背景知识
      • 7.1.1 Java注解详解
    • 7.2 Param注解分析
  • 8 type包
    • 8.1 背景知识
      • 8.1.1 模板模式
    • 8.2 类型处理器
      • 8.2.1 类型处理器基类与实现类
      • 8.2.2 TypeReference类
    • 8.3 类型注册表
  • 9 io包
    • 9.1 背景知识
      • 9.1.1 单例模式
      • 9.1.2 代理模式
      • 9.1.3 静态代理
      • 9.1.4 VFS
    • 9.2 VFS实现
      • 9.2.1 DefaultVFS
      • 9.2.2 JBoss6VFS
    • 9.3 类文件的加载
    • 9.4 ResolverUtil类
  • 10 logging包
    • 10.1 背景知识
      • 10.1.1 适配器模式
      • 10.1.2 日志框架与日志级别
      • 10.1.3 基于反射的动态代理
    • 10.2 Log接口
    • 10.3 Log接口的实现类
    • 10.4 LogFactory
    • 10.5 JDBC日志打印
  • 11 parsing包
    • 11.1 背景知识
      • 11.1.1 XML文件
      • 11.1.2 XPath
    • 11.2 XML解析
    • 11.3 文档解析中的变量替换
  • 【模块 三】配置解析包源码阅读
  • 12 配置解析概述
  • 13 binding包
    • 13.1 数据库操作的接入
      • 13.1.1 数据库操作的方法化
      • 13.1.2 数据库操作方法的接入
    • 13.2 抽象方法与数据库操作节点的关联
    • 13.3 数据库操作接入总结
      • 13.3.1 初始化阶段
      • 13.3.2 数据读写阶段
    • 13.4 MyBatis与Spring、Spring Boot的整合
  • 14 builder包
    • 14.1 背景知识
    • 14.1.1 建造者模式
    • 14.2 建造者基类与工具类
    • 14.3 SqlSourceBuilder与StaticSqlSource
    • 14.4 CacheRefResolver和ResultMapResolver
      • 14.4.1 CacheRefResolver类
      • 14.4.2 ResultMapResolver类
    • 14.5 ParameterExpression类
    • 14.6 XML文件解析
      • 14.6.1 XML文件的声明解析
      • 14.6.2 配置文件解析
      • 14.6.3 数据库操作语句解析
      • 14.6.4 Statement解析
      • 14.6.5 引用解析
    • 14.7 注解映射的解析
      • 14.7.1 注解映射的使用
      • 14.7.2 注解映射解析的触发
      • 14.7.3 直接注解映射的解析
      • 14.7.4 间接注解映射的解析
  • 15 mapping包
    • 15.1 SQL语句处理功能
      • 15.1.1 MappedStatement类
      • 15.1.2 SqlSource类
      • 15.1.3 BoundSql
    • 15.2 输出结果处理功能
      • 15.2.1 ResultMap
      • 15.2.2 ResultMapping
      • 15.2.3 Discriminator
    • 15.3 输入参数处理功能
    • 15.4 多数据库种类处理功能
    • 15.5 其他功能类
  • 16 scripting包
    • 16.1 背景知识
      • 16.1.1 OGNL
    • 16.2 语言驱动接口及语言驱动注册表
    • 16.3 SQL节点树的组建
    • 16.4 SQL节点树的解析
      • 16.4.1 OGNL辅助类
      • 16.4.2 表达式求值器
      • 16.4.3 动态上下文
      • 16.4.4 SQL节点及其解析
    • 16.5 再论SqlSource
      • 16.5.1 SqlSource的生成
      • 16.5.2 DynamicSqlSource的转化
      • 16.5.3 RawSqlSource的转化
      • 16.5.4 SqlSource接口的实现类总结
  • 17 datasource包
    • 17.1 背景知识
      • 17.1.1 java.sql包和javax.sql包
      • 17.1.2 DriverManager
      • 17.1.3 DataSource
      • 17.1.4 Connection
      • 17.1.5 Statement
    • 17.2 数据源工厂接口
    • 17.3 JNDI数据源工厂
    • 17.4 非池化数据源及工厂
      • 17.4.1 非池化数据源工厂
      • 17.4.2 非池化数据源
    • 17.5 池化数据源
      • 17.5.1 池化数据源类的属性
      • 17.5.2 池化连接的给出与收回
      • 17.5.3 池化连接
    • 17.6 论数据源工厂
  • 【模块 四】核心操作包源码阅读
  • 18 jdbc包
    • 18.1 AbstractSQL类与SQL类
      • 18.1.1 SafeAppendable内部类
      • 18.1.2 SQLStatement内部类
      • 18.1.3 AbstractSQL类
      • 18.1.4 SQL类
    • 18.2 SqlRunner
    • 18.3 ScriptRunner
    • 18.4 jdbc包的独立性
  • 19 cache包
    • 19.1 背景知识
      • 19.1.1 Java对象的引用级别
      • 19.1.2 ReferenceQueue
    • 19.2 cache包结构与Cache接口
    • 19.3 缓存键
      • 19.3.1 缓存键的原理
      • 19.3.2 缓存键的生成
    • 19.4 缓存的实现类
    • 19.5 缓存装饰器
      • 19.5.1 同步装饰器
      • 19.5.2 日志装饰器
      • 19.5.3 清理装饰器
      • 19.5.4 阻塞装饰器
      • 19.5.5 定时清理装饰器
      • 19.5.6 序列化装饰器
    • 19.6 缓存的组建
    • 19.7 事务缓存
    • 19.8 MyBatis缓存机制
      • 19.8.1 一级缓存
      • 19.8.2 二级缓存
      • 19.8.3 两级缓存机制
  • 20 transaction包
    • 20.1 背景知识
      • 20.1.1 事务概述
    • 20.2 事务接口及工厂
    • 20.3 JDBC事务
    • 20.4 容器事务
  • 21 cursor包
    • 21.1 背景知识
      • 21.1.1 Iterable接口与Iterator接口
    • 21.2 MyBatis中游标的使用
    • 21.3 游标接口
    • 21.4 默认游标
      • 21.4.1 CursorStatus内部类
      • 21.4.2 ObjectWrapperResultHandler内部类
      • 21.4.3 CursorIterator内部类
      • 21.4.4 DefaultCursor外部类
  • 22 executor包
    • 22.1 背景知识
      • 22.1.1 基于cglib的动态代理
      • 22.1.2 javassist框架的使用
      • 22.1.3 序列化与反序列化中的方法
      • 22.1.4 ThreadLocal
      • 22.1.5 存储过程
      • 22.1.6 Statement及其子接口
    • 22.2 主键自增功能
      • 22.2.1 主键自增的配置与生效
      • 22.2.2 Jdbc3KeyGenerator
      • 22.2.3 SelectKeyGenerator
    • 22.3 懒加载功能
      • 22.3.1 懒加载功能的使用
      • 22.3.2 懒加载功能的实现
      • 22.3.3 懒加载功能对序列化和反序列化的支持
    • 22.4 语句处理功能
      • 22.4.1 MyBatis对多语句类型的支持
      • 22.4.2 MyBatis的语句处理功能
    • 22.5 参数处理功能
    • 22.6 结果处理功能
    • 22.7 结果集处理功能
      • 22.7.1 MyBatis中多结果集的处理
      • 22.7.2 结果集封装类
      • 22.7.3 结果集处理器
    • 22.8 执行器
      • 22.8.1 执行器接口
      • 22.8.2 执行器基类与实现类
    • 22.9 错误上下文
  • 23 session包
    • 23.1 SqlSession及其相关类
      • 23.1.1 SqlSession的生成链
      • 23.1.2 DefaultSqlSession类
      • 23.1.3 SqlSessionManager类
    • 23.2 Configuration类
    • 23.3 其他类
  • 24 plugin包
    • 24.1 背景知识
      • 24.1.1 责任链模式
    • 24.2 MyBatis插件开发
    • 24.3 MyBatis拦截器平台
    • 24.4 MyBatis拦截器链与拦截点
  • 【模块 五】总结与展望
  • 25 源码阅读总结
    • 25.1 前期准备
      • 25.1.1 工具准备
      • 25.1.2 项目选择
      • 25.1.3 项目使用
    • 25.2 项目初探
    • 25.3 源码阅读
      • 25.3.1 模块分析
      • 25.3.2 模块归类
      • 25.3.3 自底向上
      • 25.3.4 合理猜测
      • 25.3.5 类比阅读
      • 25.3.6 善于汇总
      • 25.3.7 网格阅读
  • 26 优秀开源项目推荐
    • 26.1 Guava
    • 26.2 Tomcat
    • 26.3 Redis
    • 26.4 Dubbo
    • 26.5 React

书籍购买地址: 京东 | 淘宝

About

书籍《通用源码阅读指导书——MyBatis源码详解》配套示例

http://yeecode.top


Languages

Language:Java 98.2%Language:TSQL 1.8%