十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了

前言

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的面试题,你能答上来几道?

  1. 源码中用了哪些设计模式?为什么要用这些设计模式?
  2. MyBatis打开调试模式之后,能打印sql语句等信息,这是怎么实现的?实现过程中使用了什么设计模式?
  3. MyBatis是如何为二级缓存动态添加日志、同步控制、阻塞、缓存淘汰策略等附加能力的?用了什么设计模式?
  4. 请描述从数据库连接池获取一个数据连接的过程;
  5. 什么是缓存雪崩?如何解决?

怎么才能更好地掌握MyBatis

市面上真正适合学习的MyBatis资料太少,有的书或资料虽然讲得比较深入,但是语言晦涩难懂,大多数人看完这些书基本都是从入门到放弃。学透MyBatis源码难道就真的就没有一种适合大多数同学的方法吗?在这分享一个MyBatis源码学习文档,这份文档从MyBatis源码的角度分析Mapper绑定过程、SqlSession操作数据库原理、插件实现原理等。

这是一份完整的《Mybatis源码分析.PDF》文档,请看完下面的章节的简单介绍,有需要可以点击这里获取文档。

第一部分:MyBatis的使用

第一部分介绍了MyBatis的一些背景知识,并比较了JDBC、SpringJDBC、Hibernate和 MyBatis

等 4 种持久层技术的优缺点,以及各自的使用场景。最后演示了单独使用 MyBatis,和在

Spring 中使用 MyBatis 等两种不同的方式。总的来说,内容应该较为充分的解答了

MyBatis 是什么,为何要使用,以及如何使用这三个问题。

  • MyBatis是什么
  • 为什么要使用MyBatis
  • 如何使用MyBatis
十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了

第二部分:配置文件解析过程

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

  • 解析<properties>节点
  • 解析<settings>节点
  • 设置<settings>内容到 Configuration 中
  • 解析<typeAliases>节点
  • 解析<plugins>节点
  • 解析<typeHandlers>节点
  • 解析<typeHandlers>节点
十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了

第三部分:映射⽂件解析过程

这部分会分析一下映射文件解析的过程。与配置文件不同,映射文件用于配置 SQL语句,字段映射关系等。映射文件中包含<cache>、<cache-ref>、<resultMap>、<sql>、<select|insert|update|delete>等二级节点,这些节点将在接下来内容中进行分析。这部分除了分析常规的 XML 解析过程外,还会向大家介绍 Mapper 接口的绑定过程,以及其他一些知识。

  • 映射⽂件解析解析⼊口
  • 解析映射⽂件
  • Mapper 接⼜绑定过程分析
  • 处理未完成解析的节点
十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了

第四部分:SQL 执⾏流程

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

  • 为 mapper 接口生成实现类
  • 根据配置信息生成 SQL,并将运行时参数设置到 SQL 中
  • 一二级缓存的实现
  • 插件机制
  • 数据库连接的获取与管理
  • 查询结果的处理,以及延迟加载等
十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了

第五部分:内置数据源

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

  • 内置数据源初始化过程
  • UnpooledDataSource
  • PooledDataSource
十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了

第六部分:缓存机制

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

十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了

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

十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了

第七部分:插件机制

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

十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了

当然还有搭配的视频教程,需要文档以及视频可转发+关注****有需要可以点击这里获取文档。

十年老架构师神级推荐,MyBatis源码分析,再也不用为源码担忧了相关推荐

  1. 开发十年老架构师:Android性能优化实践,程序员如何应对中年危机

    public static Context context; @Override protected void onCreate(Bundle savedInstanceState) { super. ...

  2. 十年架构师留下最完整的Java学习路线,学完年薪40W

    文章有点长,请大家耐心看完,话不多说直接上干货! 永不过时的编程语言--Java 编程开发. Java编程语言占比: 据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以900万的程序员数 ...

  3. 十年架构师留下最完整的Java学习路线

    原文地址:https://club.dingding.xin/topic/5081/十年架构师留下最完整的java学习路线?code=cb850abbce523c7f886f583d6dc00f5e ...

  4. GitHub最新发布,阿里十年架构师手写版spring全家桶笔记全新开源

    嗨咯,大家好! 没错,又是我,还跟前面一样,有好东西我才会出现.那是什么好东西呢?今天啊,给他分享阿里在Github最新发布的spring全家桶笔记第九版,这份笔记一共分三份:spring高级源码+s ...

  5. 前端架构师神技,三招统一团队代码风格

    本文从代码规范,代码检查,代码格式化,以及编辑器自动化实现的方向,介绍代码规范统一在我们团队的实践应用. 大纲预览 本文介绍的内容包括以下方面: 认识代码规范 制定和统一规范 神技一:ESLint 神 ...

  6. 成为 java架构师的书籍推荐

    当自己非常娴熟的运用Java编程,而且有了一一个良好的编程思路和习惯了,但是你可能还缺乏对应用软件整体架构的把握,现在就是你迈向架构师的第一步. l.<Expert One-on-One J2E ...

  7. 十年架构师详解,Spring-IoC容器装配Bean

    先看一下Spring容器内部是如何协助的,也就是Spring容器.Bean的配置信息.Bean的实现类及应用程序之间的关系,架构社区:142019080 如下图 由上图我们看到,一个Bean从创建到被 ...

  8. 十年架构师:我是这样手写Spring的,用300行代码体现优雅之道

    起源 Spring作为一个开源框架,于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作<Expert One-On-One J2EE Development ...

  9. 【Java从0到架构师】Spring - 整合 MyBatis

    整合 MyBatis 整合 MyBatis - 依赖 整合 MyBatis - 数据源 整合 MyBatis - SqlSessionFactoryBean 整合 MyBatis - MapperSc ...

最新文章

  1. gitee查看当前账号_upic+gitee图床,自由书写Markdown
  2. 排序算法一:选择排序
  3. vim的基本快捷操作(二)——可视模式
  4. 递归查询mysql数据库设计
  5. 虚拟化笔记05 OpenFiler configuration
  6. MariaDB通过命令行的方式导出指定数据库和还原指定数据库
  7. Jenkins 文档特别兴趣小组
  8. 回顾 | Apache Flink Meetup · 深圳站精彩回顾(附PPT下载)
  9. php wecp 启动_U-boot启动详解
  10. QProcess实现进程通信
  11. 使用电信光猫+华为路由器实现内网穿透,外网访问内网 之 光猫超级管理员密码获取并设置桥接模式
  12. js实现-别踩白块儿-类
  13. 光缆定位仪光衰点定位光纤识别方法
  14. 群晖搭建discuz论坛
  15. Kernel space lock contention配置及其使用
  16. Redis为什么是单线程?高并发响应快?
  17. 【夜读】一个人保持年轻的5个好习惯
  18. python实现非标准正态分布下概率密度有关计算
  19. velocity 将字符串切割按每隔3位加逗号,map集合遍历,字符串拼接,
  20. 怎么利用支付宝当面付实现手机网站支付

热门文章

  1. LVS服务器集群系统结构
  2. 一建部署LAMP脚本
  3. H264/AVC NAL单元和解码
  4. centos7-minimal安装mysql服务
  5. foxmail服务器邮箱登录,Foxmail进行远程邮箱管理
  6. 陈为说《数据可视化》
  7. java 新浪短链接_新浪短链接/腾讯短链接的API接口分享(含调用代码)
  8. 实习记录(1)——数据标注
  9. laydate点击小图标选择日期
  10. 修饰符static、final、abstract与接口