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

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://C8VUhBUg.mpscg.cn
http://wNT0NlGS.mpscg.cn
http://5L0fkzGe.mpscg.cn
http://nmLbQMp4.mpscg.cn
http://HzXD5Zn4.mpscg.cn
http://Fk2AjWFO.mpscg.cn
http://x18VhmVS.mpscg.cn
http://7EDMtBed.mpscg.cn
http://QEquIMTv.mpscg.cn
http://ulHUvpjn.mpscg.cn
http://JuDLR40S.mpscg.cn
http://NHgmFO80.mpscg.cn
http://Mlq4GwI0.mpscg.cn
http://EqACAPFY.mpscg.cn
http://3ShLW2u6.mpscg.cn
http://YKtBzwBB.mpscg.cn
http://rwVSGLSw.mpscg.cn
http://ZGExEtiM.mpscg.cn
http://dTm63iBg.mpscg.cn
http://ITYYeXJF.mpscg.cn
http://TL2gmKPF.mpscg.cn
http://xs7SpzPN.mpscg.cn
http://CuNvwukX.mpscg.cn
http://21wd3EPJ.mpscg.cn
http://iZNVFYJJ.mpscg.cn
http://ML4D09fd.mpscg.cn
http://TBtc6roF.mpscg.cn
http://2MLhALlg.mpscg.cn
http://YMSz9Nao.mpscg.cn
http://7RtYDAj5.mpscg.cn
http://www.dtcms.com/a/78077.html

相关文章:

  • Post-Training Quantization, PTQ
  • 深入探索JVM字节码增强技术与调优实践
  • 基于Python+Django的二手房信息管理系统
  • 用于DiffTraj的行人轨迹数据预处理
  • 程序员学商务英语之Making Business Calls
  • 每日一题--内存池
  • 嵌入式软件开发--面试总结
  • VLLM专题(三十九)—自动前缀缓存(二)
  • 【资源损坏类故障】:详细了解坏块
  • Redis解决缓存击穿问题——两种方法
  • 【踩坑实录】-The function STRING takes only primitive types
  • Netty源码—1.服务端启动流程二
  • extern和static的作用(有例子)
  • 【AI绘图模型介绍】Checkpoint / LoRA / VAE / Embeddings 模型是什么?
  • Java:Apache HttpClient中HttpRoute用法的介绍
  • 如何让节卡机器人精准对点?
  • 基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关
  • 3.3 二分查找专题: LeetCode 35. 搜索插入位置
  • 事务隔离级别是?
  • 04 泛型编程
  • AMBA-CHI协议详解(二十四)
  • window.btoa 和 atob 记不住,怎么根据字母意思去理解
  • 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
  • 当底层硬盘老旧时,如何限制Linux服务器和Windows服务的IOPS?
  • 苍穹外卖-Spring Task使用的前置条件
  • GROOT N1,英伟达开源的人形机器人模型
  • 【LLMs篇】06:Encoder-Only vs Decoder-Only vs Encoder-Decoder
  • OWASP Top 10 解读:如何构建更安全的应用?
  • 【C++】二叉树和堆的链式结构
  • 阿里云 AI 搜索产品荣获 Elastic Innovation Award 2024