前言
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】获取免费领取方式。 |
|
|
|
|