JavaSpring高级进阶 潜水
  • 4发帖数
  • 4主题数
  • 0关注数
  • 0粉丝
开启左侧

十大哥架构师神级保举,MyBatis源码分析,再也不用为源码担忧了

[复制链接]
JavaSpring高级进阶 发表于 2020-4-20 23:00:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

                               
登录/注册后可看大图

前言

MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL 本身,而不需要花费精力行止理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的statement配置起来,并通过java对象和statement中的sql进行映射生成终极执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
为什么要把握MyBatis?

Mybatis之以是盛行的一个原因是上手快,当学完JDBC之后,再去学习Mybatis,上手时间要比Hibernate快。一个技能学习本钱低,也是一个上风,究竟企业招人是让员工帮他写代码的,基本不会给出太多时间让员工去学习(资本家)。
另外一个原因就是sql优化上了,业务复杂的sql语句通常需要进行优化,此时操作Mybatis更加轻易一些。
现在spring boot和Mybatis plus的出现,使Mybatis利用起来更加简单了。
以是在大多数场景里,MyBatis更恰当。
为什么现在口试都要问源码?

因为这能体现一个口试者是否爱钻研,是否愿意深入原理。而企业需要的恰好是这样的人!
而且看源码我觉得有以下好处:
1)可以从源码中学习比如我们看JDK的源码,此中会有许多关于性能优化、防并发的例子,还有许多地方用了计划模式,这些都是很好的可以用来学习的代码。对于初学者来说,许多代码格式、定名等都是需要学习的,最好的办法就是通过开源代码来学习。
2)深入源码才能懂得原理有的时间,我们利用的第三方的框架,中间件等,我们要想了解他们的原理,最有用的办法就是直接看源码。源码是不会骗人的。
3)更好的办理题目只要是人写的代码,就大概存在bug,别人的开源代码也一样,通过阅读源代码可以更好的定位和办理题目。
4)为了找工作

                               
登录/注册后可看大图
mybatis源码思维脑图
大厂都在用MyBatis,跳槽的时间MyBatis更是口试必问的内容,那你对于MyBatis又把握了多少呢?
下面这5道阿里关于MyBatis的口试题,你能答上来几道?

  • 源码中用了哪些计划模式?为什么要用这些计划模式?
  • MyBatis打开调试模式之后,能打印sql语句等信息,这是怎么实现的?实现过程中利用了什么计划模式?
  • MyBatis是如何为二级缓存动态添加日志、同步控制、壅闭、缓存淘汰策略等附加本领的?用了什么计划模式?
  • 请描述从数据库连接池获取一个数据连接的过程;
  • 什么是缓存雪崩?如何办理?
怎么才能更好地把握MyBatis

市面上真正恰当学习的MyBatis资料太少,有的书或资料固然讲得比较深入,但是语言晦涩难明,大多数人看完这些书基本都是从入门到放弃。学透MyBatis源码难道就真的就没有一种恰当大多数同砚的方法吗?在这分享一个MyBatis源码学习文档,这份文档从MyBatis源码的角度分析Mapper绑定过程、SqlSession操作数据库原理、插件实现原理等。
这是一份完整的《Mybatis源码分析.PDF》文档,请看完下面的章节的简单介绍,有需要可以私信【mybatis】获取领取文档方式。
第一部分:MyBatis的利用
第一部分介绍了MyBatis的一些背景知识,并比较了JDBC、SpringJDBC、Hibernate和 MyBatis
等 4 种持久层技能的优缺点,以及各自的利用场景。最后演示了单独利用 MyBatis,和在
Spring 中利用 MyBatis 等两种不同的方式。总的来说,内容应该较为充分的解答了
MyBatis 是什么,为何要利用,以及如何利用这三个题目。

  • MyBatis是什么
  • 为什么要利用MyBatis
  • 如何利用MyBatis

                               
登录/注册后可看大图

第二部分:配置文件剖析过程
我们在利用 MyBatis 框架时,通常会进行一定的设置,使其能更好的满足我们的需求。对于一个框架来说,提供较为丰富的配置文件,也是其灵活性的体现。这部分将会介绍 MyBatis 配置文件中的大部分节点剖析过程,包罗但不限于 properties、settings、typeAliase、typeHandlers 等。

  • 剖析节点
  • 剖析节点
  • 设置内容到 Configuration 中
  • 剖析节点
  • 剖析节点
  • 剖析节点
  • 剖析节点

                               
登录/注册后可看大图

第三部分:映射件剖析过程
这部分会分析一下映射文件剖析的过程。与配置文件不同,映射文件用于配置 SQL语句,字段映射关系等。映射文件中包罗、、、、等二级节点,这些节点将在接下来内容中进行分析。这部分除了分析通例的 XML 剖析过程外,还会向大家介绍 Mapper 接口的绑定过程,以及其他一些知识。

  • 映射件剖析剖析口
  • 剖析映射件
  • Mapper 接绑定过程分析
  • 处理未完成剖析的节点

                               
登录/注册后可看大图

第四部分:SQL 执流程
这部分将对 MyBatis 执行 SQL 的过程进行较为详尽的分析。该过程比较复杂,涉及的技能点许多。包括但不限于以下技能点:

  • 为 mapper 接口生成实现类
  • 根据配置信息生成 SQL,并将运行时参数设置到 SQL 中
  • 一二级缓存的实现
  • 插件机制
  • 数据库连接的获取与管理
  • 查询结果的处理,以及延迟加载等

                               
登录/注册后可看大图

第五部分:内置数据源
这部分将向大家介绍 MyBatis 内置数据源的实现逻辑。MyBatis 支持三种数据源配置,分别为 UNPOOLED、POOLED 和 JNDI。并提供了两种数据源实现,分别是UnpooledDataSource 和 PooledDataSource 。 在这三种数据源配置中, UNPOOLED 和 POOLED 是我们最常用的两种配置,这两种数据源也是本章要重点分析的对象。至于 JNDI,MyBatis 提供这种数据源的目的是为了让其可以或许运行在 EJB 或应用服务器等容器中,这一点官方文档中有所分析。

  • 内置数据源初始化过程
  • UnpooledDataSource
  • PooledDataSource

                               
登录/注册后可看大图

第六部分:缓存机制
在 MyBatis 中,Cache 是缓存接口,定义了一些基本的缓存操作,所有缓存类都应该实现该接口。 MyBatis 内部提供了丰富的缓存实现类,比如具有基本缓存功能的PerpetualCache ,具有 LRU 策略的缓存 LruCache ,以及可包管线程安全的缓存SynchronizedCache 和具备壅闭功能的缓存 BlockingCache 等。除此之外,还有许多缓存实现类,这里就不一一列举了。需要特别分析的是,MyBatis 在实现缓存模块的过程中,利用了装饰模式。在以上几种缓存实现类中, PerpetualCache 相称于装饰模式中的ConcreteComponent。LruCache、SynchronizedCache 和 BlockingCache 等相称于装饰模式中的 ConcreteDecorator。它们的关系如下:

                               
登录/注册后可看大图

以上对 Cache 接口的实现类进行了简单的介绍,接下来,我们一起深入到源码中,看看这些缓存类的实现。

                               
登录/注册后可看大图

第七部分:插件机制
一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展。这样的好处是显而易见的,一是增长了框架的灵活性。二是开发者可以结合实际需求,对框架进行拓展,使其可以或许更好的工作。以 MyBatis 为例,我们可基于 MyBatis 插件机制实现分页、分表,监控等功能。由于插件和业务无关,业务也无法感知插件的存在。因此可以无感植入插件,在无形中增强功能。

                               
登录/注册后可看大图

当然还有搭配的视频教程,需要文档以及视频可转发+关注后私信回复【mybatis】获取免费领取方式。

精彩评论13

远方的你6257 发表于 2020-4-27 08:21:37 | 显示全部楼层
hibernate现在还有人用吗?现在不都mybatis了?
金色海上海 发表于 2020-6-11 06:11:32 | 显示全部楼层
推荐一下sqltoy
用户3211569971 发表于 2020-4-20 23:34:13 | 显示全部楼层
转发了
猿攀网篮 发表于 2020-9-13 16:27:44 | 显示全部楼层
转发了
一汪海洋 发表于 2020-4-21 19:16:44 | 显示全部楼层
转发了
风随韵 发表于 2020-9-11 12:33:28 | 显示全部楼层
转发了
StevenFang934 发表于 2020-4-21 14:30:15 | 显示全部楼层
转发了
漠北孤川 发表于 2020-4-20 23:40:48 | 显示全部楼层
转发了
春之陽 发表于 2020-4-21 08:41:21 | 显示全部楼层
转发了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
在线客服邮箱
wxcy#wkgb.net

邮箱地址#换为@

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城