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

0.2 延迟加载
Mybatis 支持延迟记载,但默认没有开启,在 Mybatis 配置文件中,可以配置是否启用延迟加载
lazyLoadingEnabled=true|false。
原理
- 使用 CGLIB 创建目标对象的代理对象
- 当调用目标方法 user.getOrderList()时,进入拦截器 invoke 方法,发现 user.getOrderList()是 null 值,执行 sql 查询 order 列表
- 把 order 查询上来,然后调用
user.setOrderList(List<Order>orderList),接着完成 user.getOrderList()方法的调用

MyBatis
https://alleyf.github.io/2026/03/c478e18db501.html