MyBatis 是一个优秀的 Java 持久化框架,SSM 框架组合(Spring + SpringMVC + Mybatis),依赖 MyBatis 搭建的项目更是数不胜数,在互联网公司的使用中,占据了大片江山,你在使用 MyBatis 吗?会使用你真的了解 MyBatis 吗?
刚好,趁着现在还有时间,这里将技术面试Mybatis中最常见的面试问题和解答思路整理一下,由于篇幅原因这里只展示了目录和内容截图展示,下面是这份MyBatis的内容展示一起来看一下吧。
一、MyBatis筑基
MyBatis 是一个容易上手的持久层框架,使用者通过简单的学习即可掌握其常用特性的用法,这也是 MyBatis 被广泛使用的原因之一。在深入分析 MyBatis 源码前,我想先向大家介绍一下 MyBatis 的一些基础知识这一部分针对基础差点的,选择性跳过。
目录
![597f3d9464e3f58c4c9c674a378eb3f0.png](https://img-blog.csdnimg.cn/img_convert/597f3d9464e3f58c4c9c674a378eb3f0.png)
内容展示
![9922c46c70e87864affda3bbfc3855bd.png](https://img-blog.csdnimg.cn/img_convert/9922c46c70e87864affda3bbfc3855bd.png)
二、配置件解析过程
比较了JDBC、SpringJDBC、Hibernate和 MyBatis等 4 种持久层技术的优缺点,以及各自的使用场景。最后演示了单独使用 MyBatis,和在Spring 中使用 MyBatis 等两种不同的方式。
目录
![9f911e5cc59640fb533153ce23af0472.png](https://img-blog.csdnimg.cn/img_convert/9f911e5cc59640fb533153ce23af0472.png)
内容展示
![4fcf4397e836087f11ff103b85f837e7.png](https://img-blog.csdnimg.cn/img_convert/4fcf4397e836087f11ff103b85f837e7.png)
三、映射件解析过程
分析映射文件解析的过程。与配置文件不同,映射文件用于配置 SQL 语句,字段映射关系等。映射文件中包含"、、、 < sql> 等二级节点,这些节点将在接下来内容中进行分析
目录
![d237276a16119400bf72adf004423f37.png](https://img-blog.csdnimg.cn/img_convert/d237276a16119400bf72adf004423f37.png)
内容展示
![e5ab1ebc2a9bc768e76ff4f03a47d02e.png](https://img-blog.csdnimg.cn/img_convert/e5ab1ebc2a9bc768e76ff4f03a47d02e.png)
四、SQL 执流程
对 MyBatis 执行 SQL 的过程进 行较为详尽的分析。该过程比较复杂,涉及的技术点很多。包括但不限于以下技术点:
1. 为 mapper 接口生成实现类
2. 根据配置信息生成 SQL,并将运行时参数设置到 SQL 中
3. 一二级缓存的实现
4. 插件机制
5. 数据库连接的获取与管理
6. 查询结果的处理,以及延迟加载等
如果大家能掌握上面的技术点,那么对 MyBatis 的原理将会有很深入的理解。
目录
![6b082e7300d664a46ada3163b49efe76.png](https://img-blog.csdnimg.cn/img_convert/6b082e7300d664a46ada3163b49efe76.png)
内容展示
![7750b5273682991fad19400885577282.png](https://img-blog.csdnimg.cn/img_convert/7750b5273682991fad19400885577282.png)
五、内置数据源
MyBatis 支持三种数据源配 置,分别为 UNPOOLED、POOLED 和 JNDI。并提供了两种数据源实现,分别是 UnpooledDataSource 和 PooledDataSource 。 在这三种数据源配置中, UNPOOLED 和 POOLED 是我们最常用的两种配置,这两种数据源也是本章要重点分析的对象。至于 JNDI, MyBatis 提供这种数据源的目的是为了让其能够运行在 EJB 或应用服务器等容器中
目录
![ab75f7c3a7a9b82139f87d3f90c8fd92.png](https://img-blog.csdnimg.cn/img_convert/ab75f7c3a7a9b82139f87d3f90c8fd92.png)
内容展示
![4c74e34dfc161bd52aa163dc921c1af8.png](https://img-blog.csdnimg.cn/img_convert/4c74e34dfc161bd52aa163dc921c1af8.png)
六、缓存机制
在 Web 应用中,缓存是必不可少的组件。通常我们都会用 Redis 或 memcached 等缓 存中间件,拦截大量奔向数据库的请求,以减轻数据库压力。作为一个重要的组件,MyBatis 自然也在内部提供了相应的支持。通过在框架层面增加缓存功能,可减轻数据库的压力,同 时又可以提升查询速度,可谓一举两得。MyBatis 缓存结构由一级缓存和二级缓存构成,这 两级缓存均是使用 Cache 接口的实现类。因此本章将首先会向大家介绍 Cache 几种实现类 的源码,然后再分析一级和二级缓存的实现。
目录
![b5e4cf436d67d9d58915bb51c124a86a.png](https://img-blog.csdnimg.cn/img_convert/b5e4cf436d67d9d58915bb51c124a86a.png)
七、插件机制
一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展。这样的 好处是显而易见的,一是增加了框架的灵活性。二是开发者可以结合实际需求,对框架进行 拓展,使其能够更好的工作。以 MyBatis 为例,我们可基于 MyBatis 插件机制实现分页、 分表,监控等功能。由于插件和业务无关,业务也无法感知插件的存在。因此可以无感植入 插件,在无形中增强功能。 开发 MyBatis 插件需要对 MyBatis 比较深了解才行,一般来说最好能够掌握 MyBatis 的源码,门槛相对较高。本篇文章在分析完 MyBatis 插件机制后,会手写一个简单的分页 插件,以帮助大家更好的掌握 MyBatis 插件的编写。
目录
![da52bbde70dbd7799e209e5de25a1931.png](https://img-blog.csdnimg.cn/img_convert/da52bbde70dbd7799e209e5de25a1931.png)
内容展示
![a3be7dd3b11e7c410c067d24c388704c.png](https://img-blog.csdnimg.cn/img_convert/a3be7dd3b11e7c410c067d24c388704c.png)
市面上真正适合学习的MyBatis资料太少,有的书或资料虽然讲得比较深入,但是语言晦涩难懂,大多数人看完这些书基本都是从入门到放弃,有需要获取学习资料的朋友关注作者并转发,私信作者【学习】二字,便可以领取学习资料喔