写点什么

阿里 p8 私藏 MyBatis 笔记,从入门到精通,纵享源码细节

用户头像
周老师
关注
发布于: 2021 年 03 月 20 日

前言

越来越多的企业已经将 MyBatis 使用到了正式的生产环境,我认为流行的原因就在于绝大部分项目都是面向表结构编程的,把 Java 对象仅当成数据容器,查询和模型变更都设计在一张表上,所谓业务逻辑就是一堆增删改查的 sql 集合,因此 Mybatis 用起来非常方便。

为什么要学 MyBatis?

除了我上面说的目前 MyBatis 在国内非常流行外,还有以下几点:

①学好 MyBatis 能很好地帮助我们解决数据层开发的问题;

MyBatis 源码中有很多设计模式和并发编程的技巧,学好源码对提升编码能力有很大的帮助;

③最后,Mybatis 源码也是大厂面试的经常问的点。

基于上述情况,本次将给大家分享阿里 p8 私藏 MyBatis 笔记,帮助大家由浅入深地学习 MyBatis 相关知识,纵享源码细节,让开发者不仅知其然更知其所以然

注:由于内容较多,本次将展示部分,如果看得不过瘾想更加深入地了解本笔记彻底掌握 MyBatis 底层原理,可以见文末

本文分为两部分,但是我想反套路来一波,首先给大家展示一下源码,再展示 MyBatis 整体学习内容,不多 bb,直接上了。


A:精进 MyBatis 源码分析 - 整体架构

①整体架构

  • 项目结构

  • 整体架构

  • 基础支持层

  • 核心处理层

  • 接口层


B:精进 MyBatis 源码分析 - 基础支持层

①基础支持层

  • 解析器模块

  • 反射模块

  • 异常模块

  • 数据源模块

  • 事务模块

  • 缓存模块

  • 类型模块

  • IO 模块

  • 日志模块

  • 注解模块

  • Binding 模块


C:精进 MyBatis 源码分析 - MyBatis 初始化(一)之加载 mybatis-config.xml

①MyBatis 的初始化

②初始化(一)之加载 mybatis-config.xml

  • SqlSessionFactoryBuilder

  • XMLConfigBuilder

  • Configuration


D:精进 MyBatis 源码分析 - MyBatis 初始化(二)之加载 Mapper 接口与 XML 映射文件

①MyBatis 的初始化

②初始化(二)之加载 Mapper 接口与映射文件

  • 解析入口

  • MapperAnnotationBuilder

  • XMLMapperBuilder

  • XMLStatementBuilder

  • MapperBuilderAssistant

  • RequestMapping

  • ResultMap

  • MappedStatement


E:精进 MyBatis 源码分析 - MyBatis 初始化(三)之 SQL 初始化(上)

①MyBatis 的初始化

②初始化(三)之 SQL 初始化(上)

  • LanguageDriver

  • XMLScriptBuilder

  • NodeHandler

  • DynamicContext

  • SqlNode

  • OgnlCache


F:精进 MyBatis 源码分析 - MyBatis 初始化(四)之 SQL 初始化(下)

①MyBatis 的初始化

②初始化(四)之 SQL 初始化(下)

  • SqlSourceBuilder

  • ParameterExpression

  • ParameterMapping

  • SqlSource

  • BoundSql

  • DefaultParameterHandler


G:精尽 MyBatis 源码分析 - SQL 执行过程(一)之 Executor

①MyBatis 的 SQL 执行过程

②SQL 执行过程(一)之 Executor

  • Executor

  • BaseExecutor

  • SimpleExecutor

  • ReuseExecutor

  • BatchExecutor

  • 二级缓存

  • Executor 在哪被创建


H:精尽 MyBatis 源码分析 - SQL 执行过程(二)之 StatementHandler

①MyBatis 的 SQL 执行过程

②SQL 执行过程(二)之 StatementHandler

  • StatementHandler

  • RoutingStatementHandler

  • BaseStatementHandler

  • SimpleStatementHandler

  • PreparedStatementHandler

  • CallableStatementHandler

  • KeyGenerator

  • Jdbc3KeyGenerator

  • SelectKeyGenerator

  • NoKeyGenerator


I:精尽 MyBatis 源码分析 - SQL 执行过程(三)之 ResultSetHandler

①MyBatis 的 SQL 执行过程

②SQL 执行过程(三)之 ResultSetHandler

  • ResultSetWrapper

  • ResultSetHandler

  • DefaultResultSetHandler


J:精尽 MyBatis 源码分析 - SQL 执行过程(四)之延迟加载

①MyBatis 的 SQL 执行过程

②SQL 执行过程(四)之延迟加载

  • ResultLoader

  • ResultExtractor

  • ResultLoaderMap

  • ProxyFactory

  • JavassistProxyFactory

  • CglibProxyFactory


K:精尽 MyBatis 源码分析 - SqlSession 会话与 SQL 执行入口

①SqlSession 会话与 SQL 执行入口

  • SqlSessionFactoryBuilder

  • DefaultSqlSessionFactory

  • DefaultSqlSession

  • MapperMethod


O:精尽 MyBatis 源码分析 - 插件机制

①插件机制

  • 植入插件逻辑

  • 分页插件示例

  • Interceptor

  • Invocation

  • Plugin

  • InterceptorChain


P:精尽 MyBatis 源码分析 - MyBatis-Spring 源码分析

①配置示例

②SqlSessionFactoryBean

③MapperFactoryBean

④SqlSessionDaoSupport

⑤MapperScannerConfigurer

⑥ClassPathMapperScanner

⑦@MapperScan 注解

⑧自定义 <mybatis:scan /> 标签

⑨SqlSessionTemplate

⑩SqlSessionHolder

⑪SqlSessionUtils

⑫SqlSessionSynchronization


Q:精尽 MyBatis 源码分析 - Spring-Boot-Starter 源码分析

①配置示例

②MybatisProperties

③SpringBootVFS

④MybatisAutoConfiguration

⑤构造方法

  • afterPropertiesSet 方法

  • sqlSessionFactory 方法

  • sqlSessionTemplate 方法

  • MapperScannerRegistrarNotFoundConfiguration

  • AutoConfiguredMapperScannerRegistrar

⑥spring.factories 文件


A:MyBatis 快速入门

  • 为什么需要 ORM 框架?


  • MyBatis 快速入门


B:MyBatis 开发要点

轻松掌握要点,你将清楚地知道:

①到底是 resultType 还是 resultMap?

②如何传递多个参数?

③如何获取主键?

④了解 SQL 元素和 SQL 的参数,动态 SQL,代码生成器,关联查询,缓存等知识。


C:MyBatis 源码概述

初探源码,为以后深入学习 MyBatis 源码做好铺垫,从这里你将学习到:

①怎么下载 MyBatis 源码

②源码架构分析

③外观模式(门面模式)

④面向对象设计需要遵循的六大设计原则


D:日志模块分析

MyBatis 没有提供日志的实现类,需要接入第三方的日志组件,但第三方日志组件都有各自的 Log 级别,且各不相同,而 MyBatis 统一提供了 trace、debug、warn、error 四个级别。

因此,你需要掌握以下 5 点:

①日志模块需求分析

②适配器模式

③怎么实现优先加载日志组件?

④代理模式和动态代理

⑤优雅的增强日志功能


E:数据源模块分析

数据源模块重点讲解数据源的创建和数据库连接池的源码分析;数据源创建比较复杂,对于复杂对象的创建,可以考虑使用工厂模式来优化。

这个章节,主要会介绍以下 4 点:

①简单工厂模式

②工厂模式

③数据源的创建

④数据库连接池技术解析


F:缓存模块分析

①MyBatis 缓存模块需满足如下需求:

  • MyBatis 缓存的实现是基于 Map 的,从缓存里面读写数据是缓存模块的核心基础功能;

  • 除核心功能之外,有很多额外的附加功能,如:防止缓存击穿,添加缓存清空策略(fifo、lru)、序列化功能、日志能力、定时清空能力等;

  • 附加功能可以以任意的组合附加到核心基础功能之上。

基于 Map 核心缓存能力,将阻塞、清空策略、序列化、日志等等能力以任意组合的方式优雅的增强是 Mybatis 缓存模块实现最大的难题,用动态代理或者继承的方式扩展多种附加能力的传统方式存在以下问题:

这些方式是静态的,用户不能控制增加行为的方式和时机;另外,新功能的存在多种组合,使用继承可能导致大量子类存在。综上,MyBtis 缓存模块采用了装饰器模式实现了缓存模块。

②装饰器模式

③装饰器在缓存模块的使用

④缓存的唯一标识 CacheKey


G:反射模块分析以及 MyBatis 流程



第一阶段:配置加载阶段

①建造者模式

  • 什么是建造者模式

  • 与工厂模式区别

②配置加载的核心类

  • 建造器三个核心类

  • 关于 Configuration 对象

③配置加载过程


第二阶段:代理封装阶段

①Mybatis 的接口层

  • SqlSession

  • 策略模式

  • SqlSessionFactory

②binding 模块分析

  • binding 模块核心类

  • binding 模块运行流程


第三个阶段:数据访问阶段

①关于 Executor 组件

②Executor 中的模板模式

③Executor 的三个重要小弟

④关于 StatementHandler

⑤关于 ResultHandler


与 spring 结合原理

①MyBatis-Spring 是什么

②MyBatis-Spring 集成配置最佳实践

③MyBatis-Spring 集成原理分析


插件开发

①理解插件

②插件开发快速入门

③责任链模式

④插件模块源码分析


欢迎大家扫码来关注公众号博主,获取文章全部资料,此公众号会持续更新技术干货、不定期分享 Java 进阶面试宝典、Java 核心知识、架构书籍电子版


用户头像

周老师

关注

精通java热衷于分享java领域资料,感谢支持 2020.06.09 加入

还未添加个人简介

评论

发布
暂无评论
阿里p8私藏MyBatis笔记,从入门到精通,纵享源码细节