下面我会详细讲解Mybatis执行流程、缓存原理及相关面试题汇总。
Mybatis执行流程
Mybatis的执行流程大致可以分为以下几个步骤:
- 解析SqlMapConfig.xml文件,创建Configuration对象;
- 解析映射文件,创建MappedStatement对象;
- 创建SqlSessionFactory对象;
- 创建SqlSession对象;
- 使用SqlSession执行SQL语句,返回结果。
流程图如下所示:
graph LR;
A[解析SqlMapConfig.xml文件] --> B[创建Configuration对象];
B --> C[解析映射文件,创建MappedStatement对象];
C --> D[创建SqlSessionFactory对象];
D --> E[创建SqlSession对象];
E --> F[使用SqlSession执行SQL语句,返回结果];
其中,步骤2和步骤4会根据需要多次执行,因为可能会有多个映射文件和SqlSession。
Mybatis缓存原理
Mybatis的缓存分为一级缓存和二级缓存。
一级缓存
一级缓存是SqlSession级别的缓存,其默认开启。当SqlSession执行查询操作时,查询结果会被缓存到一级缓存中,下一次查询相同的SQL语句时,直接从一级缓存中获取结果,提高查询效率。
以下是一级缓存的特点:
- 默认开启,不需要额外配置;
- 存储作用域限定于同一个SqlSession,因此是线程不安全的;
- 当执行了CRUD操作时,一级缓存会被清空。
二级缓存
二级缓存是全局缓存,其生命周期比一级缓存长,可以被多个SqlSession共享。通过配置Mybatis的配置文件,可以将查询结果存储到二级缓存中。查询时,先从二级缓存中查找,如果没有则从数据库中读取,并将查询结果存到二级缓存中,以供后续使用。
以下是二级缓存的特点:
- 需要手动配置开启;
- 存储作用域为Mapper级别,多个SqlSession可以共享;
- 对于相同查询条件的数据,只查询一次,直接从缓存中获取数据。
相关面试题汇总
以下是一些常见的Mybatis面试题:
- Mybatis的执行流程是什么?
- Mybatis的缓存有哪些,分别如何使用?
- 一级缓存和二级缓存的区别是什么?
- Mybatis的动态SQL有哪几种,分别如何使用?
- Mybatis的插件如何编写?
示例1:Mybatis的执行流程
对于第一个问题,我们可以回答如下:
Mybatis的执行流程可以大致分为解析配置文件、创建工厂、打开会话、执行操作、关闭会话等几个步骤。具体流程如下:
- 解析SqlMapConfig.xml文件,创建Configuration对象;
- 解析映射文件,创建MappedStatement对象;
- 创建SqlSessionFactory对象;
- 创建SqlSession对象;
- 使用SqlSession执行SQL语句,返回结果。
示例2:Mybatis的缓存
对于第二个问题,我们可以回答如下:
Mybatis的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,其生命周期为同一个会话,可以提高查询效率。一级缓存默认开启,无需额外配置。二级缓存是全局缓存,其生命周期比一级缓存长,可以被多个SqlSession共享。需要手动配置开启,并且配置映射文件的缓存策略。要注意缓存的作用域和缓存策略的选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis执行流程、缓存原理及相关面试题汇总 - Python技术站