MyBatis

本文最后更新于:几秒前

0.1 执行流程

  1. 读取 MyBatis 配置文件:mybatis-config.xml 加载运行环境和映射文件
  2. 构造会话工厂 SqISessionFactory
  3. 会话工厂创建 SqISession 对象(包含了执行 SQL 语句的所有方法)
  4. 操作数据库的接口,Executor 执行器,同时负责查询缓存的维护
  5. Executor 接口的执行方法中有一个 MappedStatement 类型的参数,封装了映射信息
  6. 输入参数映射
  7. 输出结果映射

image.png

0.2 延迟加载

Mybatis 支持延迟记载,但默认没有开启,在 Mybatis 配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled=true|false

原理

  1. 使用 CGLIB 创建目标对象的代理对象
  2. 当调用目标方法 user.getOrderList()时,进入拦截器 invoke 方法,发现 user.getOrderList()是 null 值,执行 sql 查询 order 列表
  3. 把 order 查询上来,然后调用 user.setOrderList(List<Order>orderList),接着完成 user.getOrderList()方法的调用

image.png


MyBatis
https://alleyf.github.io/2026/03/c478e18db501.html
作者
fcs
发布于
2026年3月8日
更新于
2026年3月9日
许可协议