📚 分类
spring
🕵🏽‍♀️ 问题描述
mybatis是否支持延迟加载?
👨‍🏫 问题讲解
❒ Mybatis支持延迟记载,但默认没有开启
✔ 单条查询配置 fetchType="lazy"

✔ 全局配置
mybatis-config.xml

    
    
    
    
    
    


❒ 什么叫做延迟加载?
✔ 查询用户的时候,把用户所属的订单数据也查询出来,这个是立即加载
✔ 查询用户的时候,暂时不查询订单数据,当需要订单的时候,再查询订单,这个就是延迟加载

❒ 延迟加载的原理
1.使用CGLIB创建目标对象的代理对象
2.当调用目标方法user.getOrderlist()时,进入拦截器invoke方法,发现user.getOrderlist()是null值,执行sql查询order列表
3.把order查询上来,然后调用user.setOrderlist(ListorderList),接着完成user.qetOrderlist()方法的调用
🏳️‍🌈 问题总结
❒ Mybatis是否支持延迟加载?
✔ 延迟加载的意思是:就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。
✔ Mybatis支持一对一关联对象和一对多关联集合对象的延迟加载
✔ 在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true/false,默认是关闭的

❒ 延迟加载的底层原理知道吗?
✔ 使用CGLIB创建目标对象的代理对象
✔ 当调用目标方法时,进入拦截器invoke方法,发现目标方法是null值,执行sql查询
✔ 获取数据以后,调用set方法设置属性值,再继续查询目标方法,就有值了
📖 问题信息
📈 浏览次数:27 | 📅 更新时间:2025-12-13 10:50:44
📦 创建信息
🏷️ ID:53 | 📅 创建时间:2024-11-07 09:15:16