❒ Mybatis支持延迟记载,但默认没有开启
✔ 单条查询配置 fetchType="lazy"
✔ 全局配置
mybatis-config.xml
<settings>
<!--开启二级缓存-->
<setting name="cacheEnabled"value="true"/>
<!-- 开启驼峰命名自动映射 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 开启延时加载 -->
<setting name="lazyLoadingEnabled" value ="true" />
</settings>
❒ 什么叫做延迟加载?
✔ 查询用户的时候,把用户所属的订单数据也查询出来,这个是立即加载
✔ 查询用户的时候,暂时不查询订单数据,当需要订单的时候,再查询订单,这个就是延迟加载
❒ 延迟加载的原理
1.使用CGLIB创建目标对象的代理对象
2.当调用目标方法user.getOrderlist()时,进入拦截器invoke方法,发现user.getOrderlist()是null值,执行sql查询order列表
3.把order查询上来,然后调用user.setOrderlist(List<Order>orderList),接着完成user.qetOrderlist()方法的调用