前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【技术创作101训练营】聊聊MyBatis源码

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

原创
作者头像
小诚信驿站
修改2023-09-02 20:00:16
8870
修改2023-09-02 20:00:16
举报
文章被收录于专栏:技术一号位指南(小诚信驿站)

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):

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PPT
  • 演讲文稿:
    • 开场(第1,2页PPT):
      • (第3页PPT):
        • (第4页PPT):
          • (第5页PPT):
            • 简介
              • 1.1、MyBatis是什么?
              • 1.2、为什么要用MyBatis?
              • 1.3、为什么要看源码?
            • (第6页PPT):
              • (第7、8页PPT):
                • API层:
                • 数据处理层:
                • 基础支撑层:
              • (第9页PPT):
                • (第10页PPT):
                  • (第11页PPT):
                    • (第12、13页PPT):
                      • (第14页PPT):
                        • (第15页PPT):
                        相关产品与服务
                        数据库
                        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档