# MyBatisDemo **Repository Path**: grapefruitof/MyBatisDemo ## Basic Information - **Project Name**: MyBatisDemo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2022-10-23 - **Last Updated**: 2022-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # [MyBatisDemo](https://github.com/yeecode/MyBatisDemo) 该项目是《通用源码阅读指导书——MyBatis源码详解》书籍的配套示例。 --- 《通用源码阅读指导书——MyBatis源码详解》是一本以MyBatis源码为材料,详细介绍源码阅读相关方法和技巧的源码阅读指导书籍。 《通用源码阅读指导书——MyBatis源码详解》以MyBatis源码中的包为单位,详细和透彻地介绍每个类的源码,包括其背景知识、组织方式、逻辑结构、实现细节。在的讲解中,本书不漏过每一个类,不跳过每一个难点,做到深浅一致。在阅读MyBatis源码的过程中,本书使用了运行初探、模块归类、合理猜测、类比阅读、网格阅读等许多源码阅读方法。最后,本书对这些源码阅读方法进行了进一步的总结整理。 《通用源码阅读指导书——MyBatis源码详解》适合想要开展源码阅读的开发者、想要借鉴优秀设计的开发者、想要深入了解MyBatis原理的开发者。阅读本书,能让读者在详细了解MyBatis源码的基础上提升自己的源码阅读能力、系统架构能力、软件开发能力。 **书籍购买地址:** [**京东**](https://union-click.jd.com/jdc?e=&p=AyIGZRprFQEaBFQeWBwyVlgNRQQlW1dCFFlQCxxKQgFHREkdSVJKSQVJHFRXFk9FUlpGQUpLCVBaTFhbXQtWVmpSWRtYHQETAlYSax10SA8XeytMZ0xfIFkkVQEMQD1HC0MOHjdUK1sUAxIDXB1TFwIiN1Uca0NsEgZUGloUBxICVitaJQIWD1AZUxQCEg5VE1glBRIOZUAOewQaVAcfDh0FEQVUGVklMiIEZStrFTIRNxd1DEUDFFRcGF4XUEUGUBoJRVFCA1QdXhEAGlRXSFhCABQ3VxpaEQs%3D) | [**淘宝**](https://s.click.taobao.com/fYrflyu) --- 该项目包含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源码的过程中,本书使用了运行初探、模块归类、合理猜测、类比阅读、网格阅读等许多源码阅读方法,并对这些源码阅读方法进行了进一步的总结整理。 本书适合架构师、程序员提升自己的源码阅读能力、系统架构能力、软件开发能力,也有助于产品经理、测试人员、运维人员等从业者了解软件架构细节。 **书籍购买地址:** [**京东**](https://union-click.jd.com/jdc?e=&p=AyIGZRprFQEaBFQeWBwyVlgNRQQlW1dCFFlQCxxKQgFHREkdSVJKSQVJHFRXFk9FUlpGQUpLCVBaTFhbXQtWVmpSWRtYHQETAlYSax10SA8XeytMZ0xfIFkkVQEMQD1HC0MOHjdUK1sUAxIDXB1TFwIiN1Uca0NsEgZUGloUBxICVitaJQIWD1AZUxQCEg5VE1glBRIOZUAOewQaVAcfDh0FEQVUGVklMiIEZStrFTIRNxd1DEUDFFRcGF4XUEUGUBoJRVFCA1QdXhEAGlRXSFhCABQ3VxpaEQs%3D) | [**淘宝**](https://s.click.taobao.com/fYrflyu) ![书籍介绍](./pic/book_info.jpg) **书籍购买地址:** [**京东**](https://union-click.jd.com/jdc?e=&p=AyIGZRprFQEaBFQeWBwyVlgNRQQlW1dCFFlQCxxKQgFHREkdSVJKSQVJHFRXFk9FUlpGQUpLCVBaTFhbXQtWVmpSWRtYHQETAlYSax10SA8XeytMZ0xfIFkkVQEMQD1HC0MOHjdUK1sUAxIDXB1TFwIiN1Uca0NsEgZUGloUBxICVitaJQIWD1AZUxQCEg5VE1glBRIOZUAOewQaVAcfDh0FEQVUGVklMiIEZStrFTIRNxd1DEUDFFRcGF4XUEUGUBoJRVFCA1QdXhEAGlRXSFhCABQ3VxpaEQs%3D) | [**淘宝**](https://s.click.taobao.com/fYrflyu) 书籍目录: - 前言 - 【模块 一】背景介绍 - 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 **书籍购买地址:** [**京东**](https://union-click.jd.com/jdc?e=&p=AyIGZRprFQEaBFQeWBwyVlgNRQQlW1dCFFlQCxxKQgFHREkdSVJKSQVJHFRXFk9FUlpGQUpLCVBaTFhbXQtWVmpSWRtYHQETAlYSax10SA8XeytMZ0xfIFkkVQEMQD1HC0MOHjdUK1sUAxIDXB1TFwIiN1Uca0NsEgZUGloUBxICVitaJQIWD1AZUxQCEg5VE1glBRIOZUAOewQaVAcfDh0FEQVUGVklMiIEZStrFTIRNxd1DEUDFFRcGF4XUEUGUBoJRVFCA1QdXhEAGlRXSFhCABQ3VxpaEQs%3D) | [**淘宝**](https://s.click.taobao.com/fYrflyu)