专栏首页小诚信驿站【技术创作101训练营】聊聊MyBatis源码
原创

【技术创作101训练营】聊聊MyBatis源码

PPT

聊聊MyBatis源码-刘晓成.pptx

演讲文稿:

可以参考右下脚的页脚进行文案说明:

开场(第1,2页PPT):

大家好,我叫刘晓成,代名词的话是小诚信驿站,原因是来自大学创业的奶茶店,曾经大家倡导诚信,而我的愿望也是“晓成”相信这个诚信驿站。大家可以看下我的业务经验,工作经历会发现哇,这个人好杂,工作经历很多啊,实际上我工作仅5年。如果大家喜欢我的分享,我下次成长,普通二本学历如何跨专业曲线进大厂。

今天分享的主题是:聊聊MyBatis源码。因为做技术的经常会遇到面试问框架和源码,工作中处理问题需要debug源码,所以希望大家能有收获。

(第3页PPT):

分享的内容会分为如下几个模块:

  • 简介
  • 核心架构原理图
  • 案例讲解-初始化篇
  • 案例讲解-执行篇
  • MyBatis中的设计模式case
  • 小结

(第4页PPT):

期望你能获得的收获:

  1. 如何阅读源码
  2. 阅读源码的准备
  3. MyBatis源码逻辑架构原理
  4. MyBatis核心加载执行交互原理
  5. 开源框架中的设计模式

(第5页PPT):

黑色是需要重点说明的,其他是作为根据时间可自动填充的文案,根据时间自己灵活把控。

简介

1.1、MyBatis是什么?

MyBatis 的前身是 iBatis,其是 Apache 软件基金会下的一个开源项目。2010年该项目从 Apache 基金会迁出,并改名为 MyBatis。同期,iBatis 停止维护。MyBatis 是一种半自动化的 Java 持久层框架(persistence framework),其通过注解或 XML 的方式将对象和 SQL 关联起来。之所以说它是半自动的,是因为和 Hibernate 等一些可自动生成 SQL 的 ORM(Object Relational Mapping) 框架相比而言,使用 MyBatis 需要用户自行维护 SQL。维护 SQL 的工作比较繁琐,但也有好处。比如我们可控制 SQL 逻辑,可对其进行优化,以提高效率。

1.2、为什么要用MyBatis?

技术之间通常没有高下之分,根据主流的市场会决定你的一些技术栈的选型。常用的ORM框架有Hibernate和MyBatis,也就是ssh组合和ssm组合中的h与m。

它们的特点和区别如下:

  • Hibernate对数据库结构提供了完整的封装,实现了POJO对象与数据库表之间的映射,能够自动生成并执行SQL语句。只要定义了POJO 到数据库表的映射关系,就可以通过Hibernate提供的方法完成数据库操作。
  • Hibernate符合JPA规范,就是Java持久层API。
  • MyBatis通过映射配置文件,将SQL所需的参数和返回的结果字段映射到指定对象,MyBatis不会自动生成SQL,需要自己定义SQL语句,不过更方便对SQL语句进行优化。

总结起来:Hibernate配置要比mybatis复杂的多,学习成本也比MyBatis高MyBatis,简单、高效、灵活,但是需要自己维护SQL;Hibernate功能强大、全自动、适配不同数据库,但是非常复杂,灵活性稍差。MyBatis 是一个容易上手的持久层框架,使用者通过简单的学习即可掌握其常用特性的用法。这也是 MyBatis 被广泛使用的一个原因。

1.3、为什么要看源码?

仁者见仁,智者见智。对于1-3年的工作人员可能更希望的是面试以及提升自己的认知和思想。对于3-5年工作者,或多或少如果想要挑战更高的角色,资深技术专家或者高级技术专家,会负责架构设计,业务模块设计,技术转型等,指导新人等,则需要对于技术有着深刻的理解。而源码如何设计的架构和思想就会帮助你提升很多,毕竟融入了非常多优秀的人的结晶智慧。

(第6页PPT):

1.4、如何阅读源码?

粗了解:对于开源框架的一些框架组成介绍,看看这个框架有几个模块,各个模块是做什么的,有什么联系,每个模块都有哪些核心类。可以看下书,或者找官网看下源码模块,这里我建议直接看源码踏实(书的版本会比源码的旧)。

踩点挖:对于某个模块的核心类,debug一遍,画出时序图,对于生命线有个了解,以及调用逻辑。

细整理:梳理涉及到的类图和时序图。

常分享:可以通过回顾知识,或者排查问题经常过一遍加深自己的理解和掌握。

(第7、8页PPT):

接下来进入正题:MyBatis核心架构拆解,第八页左侧是将源码包Mybatis进行了分层,右侧是对每个源码包的备注说明。

作为ORM框架,Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来的角色。Ibatis-Spring作为Spring框架和MyBatis框架的桥梁。或者直接使用Servlet+JSP编写应用程序通过MyBatis框架的映射,让我们直接脱离JDBC直接链接数据库解放了生产力,提高了研发效率。


这里有个互动环节,大家能够将左侧和右侧的源码包对应起来么?如果可以的话 举手,或者打出你的答案,第一名可以领取技术书籍一份。


根据流程箭头我们可以看到整个数据流的节点状态。

MyBatis主要分为三层:

API层:

1、负责文件的执行IO流读取解析比如Configuration.xml,mapper.xml

2、负责业务代码暴露的SessionAPI,CRUD操作

3、负责@Mapper注解@Provider等

数据处理层:

1、负责外部XML的DOM对象解析

2、SQL的查找映射处理执行和返回

基础支撑层:

1、事务管理,缓存机制,日志管理,异常管理,插件管理


大体介绍完毕,我们来看下具体有没有案例来支撑下源码流程呢》答案是 不能让大家白来啊,接下来我们讲下案例初始化MyBatis都做了什么?


(第9页PPT):

一张完整的时序图操作流程,看起来好像做技术的一眼能看懂了,但是再看几眼放佛没有记住什么东西。因为框架源码一般封装的比较好,经常我们debug源码的时候,都会遇到很长的链路。

(第10页PPT):

那么这是我们想要的么?答案当然不是,有什么好的解决方案么?

(第11页PPT):

我们经常在使用MyBatis的过程中,会配置下XML文件或者利用注解的方式配置下扫描的包。没错,这就是SqlSessionFactoryBuilder会话工厂构建器读取的入参,通过字符流/字节流,然后如果配置了多数据源,构建出多个会话工厂,则可以根据每个会话工厂进行绑定数据源,执行过程中进行会话操作。


然后我们看了初始化MyBatis的逻辑,那么怎么执行呢?有知道的同学么?互动环节


(第12、13页PPT):

没错,XXX同学回答的很好,我们可以看图系统中的操作,我们统一理解是操作了一次会话,会话调用MyBatis提供的SessionAPI的时候其实原理是通过动态代理方式将会话委托给Session,从全局Configuration配置中获取Mapper的信息,然后进行CRUD操作,而JDBC被MyBatis封装了事务操作/更新操作/删除操作等。


讲了这么久了,大家对于MyBatis的流行从源码中看到了这些,还有别的么?互动环节


没错,设计模式,好的框架一般都会设计的时候集成了多种设计模式。

Builder模式的定义是“将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。”

此模式主要用于将复杂对象的构造过程与其表示分离。它将复杂对象的创建过程划分为简单的步骤,并屏蔽复杂对象内部的特定构造细节.

(第14页PPT):

而我们看下MyBatis框架是怎么帮我们做的呢?看下图

(第15页PPT):

小结下,我们将我们学到的初始化过程+执行化过程集合成了一张图,大家可以收藏下。

(第16页PPT):

进入问答环节,右侧是我的二维码,如果有需要深入交流的可以扫一下。

好的 ,再次感谢大家的参与。本次分享结束,期待下次见面。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go的代码规范指南-新人必看

    环境设置:*nix环境或者Mac环境,安装go语言目录,默认是usr/local/go,如果想要让代码运行,需要将项目放到usr/local/go/src目录下...

    小诚信驿站
  • Gin-Web-Framework官方指南中文(上篇)

    Gin是一个用Golang写的HTTP web框架。它具有类似于Martini的API,性能更高-快40倍。 如果需要很好的性能,那么肯定是推荐现在使用Gin。

    小诚信驿站
  • 系统设计面试:保姆指南

    像编码面试一样,那些没有有意识地为SDI做准备的应聘者,大多是表现不佳,尤其是在谷歌、Facebook、亚马逊、微软等顶级公司公司,即表现不高于平均水平的候选人...

    小诚信驿站
  • Quartz2D实战-画板工具

    czjwarrior
  • 在 ESXi 6.x和5.x虚拟机中禁用热添加/热插拔功能

    现象: 网卡和 SCSI 控制器显示为可移除设备。 与该虚拟硬件对应的“安全移除硬件”选项显示在 Windows 系统任务栏中。 如果正在使用 VMware V...

    孙杰
  • 腾讯云堡垒机之静态口令+LDAP组合认证

    背景:出于安全登录考虑,有些客户需要使用堡垒机的静态口令+LDAP组合认证,本文将说明下如何使用LDAP认证。

    张航
  • 左手用R右手Python系列7——排序

    排序可能是日常数据清洗过程中比较高频的应用了,今天这一篇给大家介绍R语言和Python中最为常见的排序函数应用。 R语言: sort order rank ar...

    数据小磨坊
  • css3动画如何解决动画的播放、暂停和重新开始

    我们播放动画时,如要暂停动画,就要用到animation-play-state这个属性。animation-play-state属性有两个值:

    小小咸鱼YwY
  • Lock Condition的那些事儿

    下面就以上述示例代码为例来分析下Condition的await和signal流程。对于线程t1来说,执行到await方法时,会添加一个节点到等待队列中,然后释放...

    luoxn28
  • 简简单单,用 LSTM 创造一个写诗机器人

    AI 科技评论按:人们已经给神经网络找到了越来越多的事情做,比如画画和写诗,微软的小冰都已经出版了一本诗集了。而其实训练一个能写诗的神经网络并不难,Automa...

    AI科技评论

扫码关注云+社区

领取腾讯云代金券