阿里 p8 私藏 MyBatis 笔记,从入门到精通,纵享源码细节
创始人
2024-03-24 10:16:53

前言

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

为什么要学 MyBatis?

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

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

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

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

基于上述情况,本次将给大家分享阿里 p8 私藏 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 注解

⑧自定义 标签

⑨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 集成原理分析

插件开发

①理解插件

②插件开发快速入门

③责任链模式

④插件模块源码分析

资料已整理成文档,需要获取的小伙伴可以直接转发+关注后私信(学习)即可获取哦

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...