导图社区 MyBatis
MyBatis的思维导图,课程目标: 1. ORM框架的发展历史与MyBatis的高级应用 2. MyBatis的体系结构与核心工作原理分析 3. MyBatis基础模块讲解与强化核心原理 4. 探寻插件的原理与深究和Spring的集成 5. 通过手写MyBatis带你掌握自己写框架的秘诀
编辑于2023-06-15 09:30:11 广东《MyBatis》 思维导图笔记
课程目标 1. ORM框架的发展历史与MyBatis的高级应用 2. MyBatis的体系结构与核心工作原理分析 3. MyBatis基础模块讲解与强化核心原理 4. 探寻插件的原理与深究和Spring的集成 5. 通过手写MyBatis带你掌握自己写框架的秘诀 架构图: 
第一章 ORM框架的发展历史与Mybatis高级应用
一、ORM的发展历程
1、JDBC的操作: 注册驱动、创建连接、获取statement、执行SQL、处理结果、关闭资源 操作特点:代码重复、资源管理、结果集处理、SQL耦合
2、Apache DBUtils DButils中提供了一个QueryRunner类,它对数据库的增删改查的方法进行了封装
官网地址:https://commons.apache.org/proper/commons-dbutils/
3、Spring JDBC 在Spring中提供了一个模板方法 JdbcTemplate,里面封装了各种各样的 execute,query和update方法
4、Hibernate
1、ORM(Object Relational Mapper) ORM框架解决的是程序对象和关系型数据库的相互映射的问题
2、Hibernate特点: a.根据数据库方言自定生成SQL,移植性好 b.自动管理连接资源 c.实现了对象和关系型数据库的完全映射,操作对象就像操作数据库记录一样 d.提供了缓存机制
3.Hibernate 缺点 a.比如API中的get(),update()和save()方法,操作的实际上是所有的字段,没有办法指定部分字段, 换句话说就是不够灵活 b. 自定生成SQL的方式,如果要基于SQL去做一些优化的话,也是非常困难的。 c 不支持动态SQL,比如分表中的表名,条件,参数变化等,无法根据条件自动生成SQL
5、Mybatis
官网地址:https://mybatis.org/mybatis-3/zh/index.html MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了 几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置 和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记 录。 “半自动”的ORM框架能够很好的解决上面所讲的Hibernate的几个问题,半自动化”是相对于 Hibernate的全自动化来说的。它的封装程度没有Hibernate那么高,不会自动生成全部的SQL语句,主 要解决的是SQL和对象的映射问题。
免除了几乎所有的JDBC代码,以及设置参数和获取结果集的工作
半自动的框架,可以解决Hibernate的几个缺点:不用更新所有字段、可以基于SQL去做一些优化,支持动态SQL
二、Mybatis实际案例
1.环境的准备
2.编程式的使用
3.代理方式的使用
三、Mybatis核心配置
1.全局配置文件
configration
properties
settings
typeAliases
TypeHandler
objectFactory
plugins
environmens
mappers
2.映射文件
cache
cache-ref
resultMap:描述如何从数据库结果集中加载对象
sql:可被其他语句引用的可重用语句块
增删改查标签:<select> <insert> <update>
四、Mybatis最佳实践
动态SQL语句:主要解决SQL生成的问题
if:需要判断的时候,条件写在test
choose:需要选择条件的时候
trim:需要去掉where,and,逗号之类的时候
foreach:需要遍历的时候
批量操作
批量插入
批量更新
批量删除
BatchExecutor
MySQL服务端对于接收的包有限制,max_allowed_packet默认是4M
defaultExecutorType:默认是SIMPLE
1.simpleExecutor 每执行一次update或select,就开启一个statement对象,用完立即关闭
2.ReuserExecutor 执行select或update,以SQL作为Key,查找Statement对象,存在就是用,不存在就创建,用完后不关闭statement,存放在Map中,供下次使用
3.BatchExecutor :执行update(批处理不支持select),将所有sql都添加到批处理中(addBatch),等待统一执行(executeBach), 他缓存了多个Statement对象。与JDBC批处理相同。executeUpdate()是一个语句访问一次数据库,executeBatch()是一批语句访问一次数据库(具体一次发送多少条SQL跟服务端的max_allowed_packet有关)。BatchExcutor底层是对JDBC ps.addBatch()和ps.executeBatch()的封装
关联查询
嵌套查询:assiute
分页操作
1.逻辑分页(假分页,rowbounds)
2.物理分页
MBG与Example
自动生成
通用Mapper
Mybatis-Plus
第二章 Mybatis的体系结构和核心工作原理分析
一、源码环境准备
张瑞敏在海尔公司推行的“日清工作法”,成功拯救公司的业绩。 这种工作法是收到书籍《卓有成效的管理者》的启发, 要求公司日事日毕,日清日高,事事人人管,人人都管事, 形成目标、日清与激励的良性循环体制。 得出结论,职场人要主动学习对自己工有实际用处的知识。
二、MyBatis体系结构

1.1 接口层:SqlSession
1.2 核心处理层
配置解析
参数映射
SQL解析
SQL执行
结果集映射
插件
1.3 基础支持层
数据源模块
事务管理模块
缓存模块
Binding模块
反射模块
类型转换模块
日志模块
资源加载模块
解析器模块
三、MyBatis核心流程
1.核心对象的生命周期
SQLSessionFactoryBuilder:加载配置信息,构建SqlSessionFactory工厂,存在于方法内部
SQLSessionFactory:创建SqlSession , 每次应用程序访问数据库,都需要创建一个会话,所以SQLSessionFactory应该存在于整个应用生命周期中,并且以单例的模式存在,否则会浪费资源
SQLSession是一个会话,因为它不是线程安全的,不能在线程间共享,sqlSession只存在一次请求或者操作中
Mapper:实际上是一个代理对象,是从SQLSession中获取的,它的作用是发送SQL来操作数据库,它应该在一个SQLSession事务方法之内
2.SqlSessionFactory
是创建SQLSession的工厂,由SQLSessionBuilder创建
3.SqlSession
会话,执行一次操作或者一次事务中创建一次
4.Mapper 代理对象
获取Mapper对象的过程,实际上上是获取了一个MapperProxy动态代理类, 代理类Invoke方法内部会获取一个Stetement对象并调用SQL执行方法
5.SQL执行
6.MyBatis核心对象
三、MyBatis核心工具类
第三章 Mybatis基础模块讲解与强化核心原理
反射模块
简述:MyBatis在进行参数处理、结果集映射等操作时会使用到大量的反射操作,Java中的反射功能虽然强 大,但是代码编写起来比较复杂且容易出错,为了简化反射操作的相关代码,MyBatis提供了专门的反 射模块,该模块位于org.apache.ibatis.reflection包下,它对常见的反射操作做了进一步的封装,提供 了更加简洁方便的反射API。
Reflector
简述:Reflector是反射模块的基础,每个Reflector对象都对应一个类,在Reflector中缓存了反射需要使 用的类的元信息
属性
构造方法
公共的API方法
RefltctorFactory:ReflectorFactory接口主要实现了对Reflector对象的创建和缓存。
Invoker:针对于Class中Field和Method的调用,在MyBatis中封装了Invoker对象来统一处理(有使用到适配器 模式)
MateClass:处理复杂的属性操作
MateObject:通过MetaObject对象解析复杂的表达式来对提供的对象进行操作
反射模块的应用
SqlSessionFactory:在创建SqlSessionFactory操作的时候会完成Configuration对象的创建,而在Configuration中默认 定义的ReflectorFactory的实现就是DefaultReflectorFactory对象
SqlSession:无相关操作
Mapper:无相关操作
执行SQL:在Statement获取结果集后,在做结果集映射的使用有使用到,在DefaultResultSetHandler的 createResultObject方法中
类型转换模块
简述:MyBatis是一个持久层框架ORM框架,实现数据库中数据和Java对象中的属性的双向映射,那么不可 避免的就会碰到类型转换的问题,在PreparedStatement为SQL语句绑定参数时,需要从Java类型转换 为JDBC类型,而从结果集中获取数据时,则需要从JDBC类型转换为Java类型,
TypeHandler
MyBatis中的所有的类型转换器都继承了TypeHandler接口,在TypeHandler中定义了类型转换器 的最基本的功能。
BaseTypeHandler
为了方便用户自定义TypeHandler的实现,在MyBatis中提供了BaseTypeHandler这个抽象类,在BaseTypeHandler中的实现方法中实现了对null的处理
TypeHandler实现类

TypeHandlerRegistry
所有的TypeHandler都保 存注册在了TypeHandlerRegistry中
TypeAliasRegistry
我们在MyBatis的应用的时候会经常用到别名,这能大大简化我们的代码,其实在MyBatis中是通过 TypeAliasRegistry类管理的
TypeHandler的应用
SqlSessionFactory:在构建SqlSessionFactory时,在Configuration对象实例化的时候在成员变量中完成了 TypeHandlerRegistry和TypeAliasRegistry的实例化
执行SQL语句:TypeHandler类型处理器使用比较多的地方应该是在给SQL语句中参数绑定值和查询结果和对象中属 性映射的地方用到的比较多
日志模块
binding模块
缓存模块
反射工具内lambda表达式使用
作为学习促进者,现场学习最主要是要主动创造信息, 以提问为主,把大部分时间给学习者,让他们在提问后 有时间创造信息和讨论表达。有价值的笔记应该是自己 创造的信息,且具备高度的个人相关性。
第四章 探索插件的原理与深究和Spring的集成
明确目标:提升学习力
随处可见的辅助工具
拆解原则:反求诸己
作为成人的学习法,应该更注重反求诸己, 以自我为中心的应用型学习,求取书籍有帮助的部分, 并用3张便签法进行实现。
“拆书”七步曲
快速阅读并找到对自己有帮助的内容进行记录和总结,整理为I便签, 贴在书籍当页;将这块知识与自己切身的经历相对照,并写成A1便签, 贴在I便签旁边;最后要产出A2便签,也就是自己通过I知识, 想要做的改变,还有未来的规划和行动记录下来,贴在冰箱上, 时刻提醒自己是否做到。
便签使用贴士
切勿陷入误区
比如附会旧知,泛泛而谈,决心泛滥和感慨万千。 因此需要实际锻炼,通过调整和磨合,以熟练掌握对便签的使用。
你可能会遇到的问题
第五章 通过手写Mybatis带你掌握自己写框架的秘诀
学习力是元能力
日本作家《即战力》影响着许多国内的年轻人,要把理财当作第一。 但是这并不符合我们的国情,实际上近十几年的股票收益波动过大 ,其收益增长率还未必比一个人自我投资成长的收益来的多。 因此分析得出,每个人最需要的能力是自我学习能力。
解读知识:为信息添加上下文
信息>知识,知识包含于信息,知识的内容是有“前因后果” 和“适用边界”,在判断一项知识的时候,可以使用这8个字 去判断这个知识的价值,懂得取舍,并可以过滤掉没有价值 的知识。便签可以帮助辨别。
I便签:辨别知识和信息
不要急于质疑和挑战
如何借助A1、A2便签来追问和反思?
用便签法升级学习力
类有两套学习机制吗,分别是从知识中学到的知识(K知识)和 经验中学到的知识(E知识)可以用便签法,将两项知行合一。,
为什么追逐“干货”是伪学习?
"干货"其实是一种伪学习,失去了其学习本身的韵味。
第六章 构建属于你自己的知识体系
知识管理:被加工的碎片化信息
第一阶段是花时间对各类知识分门别类,但并没有什么 卵用;
第二阶段是能够联系经验,加工知识,触类旁通,能够构件自己的知识体系;
第三类就牛了,可以将知识内化后能够输出,变现知识或者解决复杂问题。
学习不是照搬他人的体系
①系统化的信息不一定比碎片化的更有价值
②有自己的知识体系一定更好 ;
③即的知识和书籍中的知识体系并非同一回事 ;
④看书不一定就比看手机更容易构件自己体系。
知识体系让你成为更好的自己
构建知识体系对自己是有益处的,可以让自己的有更好的成长思维, 积极去面对挑战和新鲜环境;另外就是可以具备批判思维, 谨慎思考,不会随波逐流;最后就是可以收获系统的思维, 能够整理出过往经验的前因后果和适用边界,构建出一套系统、 立体和动态性的思维模型。
便签法:聚沙成塔的好工具
搭建体系的三种思路
第一种,从问题出发
第二种,从点到网
第三种,从网到点
第七章 知识体系如何搭建?
拆出你的沟通力
在这个质疑主义盛行的时代,作者用自己的真实经历来验证“拆书法” 是经得住实践的检验,比如他自己曾经写了一本书关于《拆出你的沟通力》, 就将知识体系划分为4个章节(塔楼),并有不同层次的楼层(进阶级) ,他用拆书法将几十本书中的知识分解出来,将这些知识石砖用于 构造关于沟通力这座知识大厦。
拆书家成长体系
拆书学院:为职场赋能
第八章 主动学习的境界
识别自己的核心能力
所谓核心能力,是一组特别的知识体系。每个岗位都需要核心能力, 知识配比不用;核心能力对每个人都很重要,知识有人认识不到
选择比勤奋重要
经验和反思是最重要的知识
做一个有梦想的行动家!
第九章 拆书家——做一个学习的促进者
一种新的“专家”:拆书家
没有拆书家拆不了的书
拆解:如何提高职场力?
拆解:如何管理下属?
像拆书家一样学习
主题
子主题
子主题
子主题
子主题
子主题
子主题
子主题
子主题