MyBatis是一个优秀的持久层ORM框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
Mybatis之所以流行的一个原因是上手快,当学完JDBC之后,再去学习Mybatis,上手时间要比Hibernate快。一个技术学习成本低,也是一个优势,毕竟企业招人是让员工帮他写代码的,基本不会给出太多时间让员工去学习(资本家)。
另外一个原因就是sql优化上了,业务复杂的sql语句通常需要进行优化,此时操作Mybatis更加容易一些。
现在spring boot和Mybatis plus的出现,使Mybatis使用起来更加简单了。
所以在大多数场景里,MyBatis更适合。
因为这能体现一个面试者是否爱钻研,是否愿意深入原理。而企业需要的恰恰是这样的人!
而且看源码我觉得有以下好处:
1)可以从源码中学习比如我们看JDK的源码,其中会有很多关于性能优化、防并发的例子,还有很多地方用了设计模式,这些都是很好的可以用来学习的代码。对于初学者来说,很多代码格式、命名等都是需要学习的,最好的办法就是通过开源代码来学习。
2)深入源码才能懂得原理有的时候,我们使用的第三方的框架,中间件等,我们要想了解他们的原理,最有效的办法就是直接看源码。源码是不会骗人的。
3)更好的解决问题只要是人写的代码,就可能存在bug,别人的开源代码也一样,通过阅读源代码可以更好的定位和解决问题。
4)为了找工作
大厂都在用MyBatis,跳槽的时候MyBatis更是面试必问的内容,那你对于MyBatis又掌握了多少呢?
下面这5道阿里关于MyBatis的面试题,你能答上来几道?
市面上真正适合学习的MyBatis资料太少,有的书或资料虽然讲得比较深入,但是语言晦涩难懂,大多数人看完这些书基本都是从入门到放弃。学透MyBatis源码难道就真的就没有一种适合大多数同学的方法吗?在这分享一个MyBatis源码学习文档,这份文档从MyBatis源码的角度分析Mapper绑定过程、SqlSession操作数据库原理、插件实现原理等。
这是一份完整的《Mybatis源码分析.PDF》文档,请看完下面的章节的简单介绍,有需要可以点击这里获取文档。
第一部分:MyBatis的使用
第一部分介绍了MyBatis的一些背景知识,并比较了JDBC、SpringJDBC、Hibernate和 MyBatis
等 4 种持久层技术的优缺点,以及各自的使用场景。最后演示了单独使用 MyBatis,和在
Spring 中使用 MyBatis 等两种不同的方式。总的来说,内容应该较为充分的解答了
MyBatis 是什么,为何要使用,以及如何使用这三个问题。
第二部分:配置文件解析过程
我们在使用 MyBatis 框架时,通常会进行一定的设置,使其能更好的满足我们的需求。对于一个框架来说,提供较为丰富的配置文件,也是其灵活性的体现。这部分将会介绍 MyBatis 配置文件中的大部分节点解析过程,包含但不限于 properties、settings、typeAliase、typeHandlers 等。
第三部分:映射⽂件解析过程
这部分会分析一下映射文件解析的过程。与配置文件不同,映射文件用于配置 SQL语句,字段映射关系等。映射文件中包含
第四部分:SQL 执⾏流程
这部分将对 MyBatis 执行 SQL 的过程进行较为详尽的分析。该过程比较复杂,涉及的技术点很多。包括但不限于以下技术点:
第五部分:内置数据源
这部分将向大家介绍 MyBatis 内置数据源的实现逻辑。MyBatis 支持三种数据源配置,分别为 UNPOOLED、POOLED 和 JNDI。并提供了两种数据源实现,分别是UnpooledDataSource 和 PooledDataSource 。 在这三种数据源配置中, UNPOOLED 和 POOLED 是我们最常用的两种配置,这两种数据源也是本章要重点分析的对象。至于 JNDI,MyBatis 提供这种数据源的目的是为了让其能够运行在 EJB 或应用服务器等容器中,这一点官方文档中有所说明。
第六部分:缓存机制
在 MyBatis 中,Cache 是缓存接口,定义了一些基本的缓存操作,所有缓存类都应该实现该接口。 MyBatis 内部提供了丰富的缓存实现类,比如具有基本缓存功能的PerpetualCache ,具有 LRU 策略的缓存 LruCache ,以及可保证线程安全的缓存SynchronizedCache 和具备阻塞功能的缓存 BlockingCache 等。除此之外,还有很多缓存实现类,这里就不一一列举了。需要特别说明的是,MyBatis 在实现缓存模块的过程中,使用了装饰模式。在以上几种缓存实现类中, PerpetualCache 相当于装饰模式中的ConcreteComponent。LruCache、SynchronizedCache 和 BlockingCache 等相当于装饰模式中的 ConcreteDecorator。它们的关系如下:
以上对 Cache 接口的实现类进行了简单的介绍,接下来,我们一起深入到源码中,看看这些缓存类的实现。
第七部分:插件机制
一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展。这样的好处是显而易见的,一是增加了框架的灵活性。二是开发者可以结合实际需求,对框架进行拓展,使其能够更好的工作。以 MyBatis 为例,我们可基于 MyBatis 插件机制实现分页、分表,监控等功能。由于插件和业务无关,业务也无法感知插件的存在。因此可以无感植入插件,在无形中增强功能。
当然还有搭配的视频教程,需要文档以及视频可转发+关注****有需要可以点击这里获取文档。