当前位置: 首页 > 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。 

相关文章:

  • 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 泛型编程
  • 受天气等影响SC8041航班三次备降延误超12小时,山航致歉
  • 家政阿姨如何炼成全国劳模?做饭、收纳、养老、外语样样都会
  • 车展之战:国产狂飙、外资反扑、智驾变辅助
  • 投资者建议发行优惠套票给“被套”小股东,张家界:将研究考虑
  • 北方旱情持续,水利部:大中型灌区春灌总体有保障
  • 铁路迎来节前出行高峰,今日全国铁路预计发送旅客1870万人次