当前位置: 首页 > article >正文

MyBatis面试常见问题

MyBatis执行流程

MyBatis的执行流程如下:

  1. 读取MyBatis配置文件mybatis-config.xml

  2. 构造会话工厂SqlSessionFactory

  3. 会话工厂创建SqlSession对象。

  4. 操作数据库的接口,Executor执行器。

  5. Executor执行方法中的MappedStatement参数。

  6. 输入参数映射。

  7. 输出结果映射。

Mybatis是否支持延迟加载?

        延迟加载(Lazy Loading)指的是在真正需要数据的时候才进行数据的加载,而不是在初始化时就加载所有数据。可以通过配置文件中的lazyLoadingEnabled配置启用或禁用延迟加载。

延迟加载的底层原理

1. 使用CGLIB创建目标对象的代理对象

2. 当调用目标方法user.getOrderList()时,进入拦截器invoke方法,发现user.getOrderList()是null值,执行sql查询order列表

3. 把order查询上来,然后调用user.setOrderList(List<Order> orderList) ,接着完成user.getOrderList()方法的调用

Mybatis支持一对一关联对象和一对多关联集合对象的延迟加载 在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false,默认是关闭的。

Mybatis的一级、二级缓存

一级缓存

一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存

二级缓存

二级缓存是基于namespace和mapper的作用域起作用的,不是依赖于SQL session,默认也是采用 PerpetualCache,HashMap 存储

注意:

1.对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了新增、修改、删除操作后,默认该作用域下所有 select 中的缓存将被 clear

2,二级缓存需要缓存的数据实现Serializable接口

3,只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓存中

Mybatis的二级缓存什么时候会清理缓存中的数据

        当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了新增、修改、删除操作后,默认该作用域下所有 select 中的缓存将被 clear。 


http://www.kler.cn/a/592283.html

相关文章:

  • 网络编程之客户端通过服务器与另外一个客户端交流
  • Java线性表(顺序表)
  • 算法刷题记录——LeetCode篇(2) [第101~200题](持续更新)
  • 【MySQL数据库】存储过程与自定义函数(含: SQL变量、分支语句、循环语句 和 游标、异常处理 等内容)
  • 美团Leaf分布式ID生成器使用教程:号段模式与Snowflake模式详解
  • 友思特应用 | 行业首创:基于深度学习视觉平台的AI驱动轮胎检测自动化
  • 基于微信小程序与SSM框架的高校课堂教学管理系统的设计与实现
  • 信息学奥赛一本通 1831:【03NOIP提高组】神经网络 | 洛谷 P1038 [NOIP 2003 提高组] 神经网络
  • 【前每日一题DAY-1】JS为什么能有异步任务?
  • 如何基于Gone编写一个Goner对接Apollo配置中心(下)—— 对组件进行单元测试
  • 破解验证码新利器:基于百度OCR与captcha-killer-modified插件的免费调用教程
  • 在处理欧拉函数时如何使用逆元
  • PHP转GO Day2 数据类型与控制结构实践(开发计算器)
  • 【高并发内存池】第二弹---深入解析高并发内存池与ThreadCache设计
  • Collection系列集合的小结+集合并发修改异常问题
  • 13 - linux 内存子系统
  • redis主从架构和集群---java
  • 【sql靶场】第18-22关-htpp头部注入保姆级教程
  • ELK+Filebeat+Kafka+Zookeeper安装部署
  • 第3章:Docker架构详解:从守护进程到镜像仓库