Java八股-MyBatis延迟加载
在黑马八股视频专题讲解时碰到的MyBatis延迟加载的问题,感觉讲解有点不太清晰,下面第二个链接是讲解清晰了
【新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)】 https://www.bilibili.com/video/BV1yT411H7YK/?p=45&share_source=copy_web&vd_source=afbacdc02063c57e7a2ef256a4db9d2a
【【Java面试】说说MyBatis中的延迟加载】 https://www.bilibili.com/video/BV1sN4y1J7TX/?share_source=copy_web&vd_source=afbacdc02063c57e7a2ef256a4db9d2a
我大概说一下原理
在说 MyBatis 中的延迟加载之前,我们先说清楚 2个概念:什么是主查询对象?什么是关联对象?假如,我们现在有两张表,一张用户表,一张订单表:
因为 User 和 Order 是1对多的关系,所以 User 就是主查询对象,而 User 对象中的 orderList 就是关联对象。
接下来让我们说下什么是延迟加载?
延迟加载,也叫懒加载、惰性加载。在 MyBatis 中,延迟加载,通常用于多表一对一或者一对多的联合查询中,如果开启了延迟加载,MyBatis 则只会进行主对象的查询,而只有在主查询对象的关联对象的属性被调用时,MvBatis 才会执行关联对象的查询。
在上述的用户-订单的例子中,如果我们在 MvBatis 中开启了延迟加载,当我们从数据库中查询主对象即某个用户信息时,并不会马上返回其关联对象-订单列表的值;而只有在该用户的订单列表属性被访问时,才会去数据库中查询订单列表的信息。
那么,如何设置延迟加载呢?
在 MyBatis 中,我们通过设置 lazyLoadingEnabled 的属性值为 true,aggressiveLazyLoading 的属性值为 false 来全局开启延迟加载。
没有开启延迟加载
开启了延迟加载
开启延迟加载但是注释了访问OrderList代码之后