Mybatis 执行流程

mybatis-config.xml (总规) ↓ SqlSessionFactory (总管) ↓ SqlSession (服务员) —— 包含所有执行方法 ↓ Executor (大管家) —— 优先查缓存(一级/二级) ↓ MappedStatement (菜谱) —— 持有SQL、参数映射、结果映射 ↓ 输入参数映射 (备菜) → JDBC执行 → 输出结果映射 (装盘) ↓ 返回POJO/集合 (上菜)

Mybatis 是否支持延迟加载

支持,默认不开启

collection fecthType=“lazy”

mybatis配置文件延迟加载 lazyLoadingEnabled

延迟加载的原理

  1. CGLIB创建目标对象的代理对象
  2. 调用目标方法 getOrderList
  3. 调用对象 invoke 方法
  4. 判断 orderList 是否为空
  5. 为空,执行SQL
  6. 不为空获取结果
  7. 封装 orderList

Mybatis 的一级缓存 二级缓存 用过吗

本地缓存 - 基于 PerpetualCache 本质是一个 HashMap 一级缓存 - 作用域是 session 级别 二级缓存 - 作用域是namespace 和 mapper的作用域,不依赖于 session 二级缓存默认关闭 settings name=“cacheEnabled” value=“true” 当某个作用域进行了增删改操作,该作用域下的所有select的缓存将被clear