MyBatis应用开发(16)延迟加载之概念

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis应用开发(16)延迟加载之概念相关的知识,希望对你有一定的参考价值。

1.1.1. 延迟加载的概念

延迟加载是指在存在关联关系时,在加载主表数据时,仅仅加载主表数据到映射的Java Bean对象中,而不会立即将关联的子表数据加载到存在关联关系的从属Java Bean中。在访问到关联的Java Bean的有关方法时,才会加载子表到关联的从属Java Bean中。

 

使用嵌套查询时,MyBatis支持延迟加载功能。

 

MyBatis提供了2种方式控制延迟加载与否。

方式一:在SqlMapConfig.xml文件中使用3setting结点控制整个程序中的associationcollection涉及的关联关系是否使用延迟加载。

 

<!-- 延迟加载:true,  立即加载:false,默认false -->

<setting  name="lazyLoadingEnabled" value="true" />

 

<!-- 侵略性延迟加载 : 默认false(3.4.2以及更新版本MyBatis)

   true:访问主表数据对应的Java Bean的代理对象任何方法将导致所有的延迟加载属性关联对象被立即加载。此时导致lazyLoadingEnabled失效。

   false:关联对象不会被立即加载。

-->

<setting  name="aggressiveLazyLoading" value="false" />

 

<!-- 在使用延迟加载之后,访问主表数据对应的Java Bean的代理对象的哪些方法将导致加载被触发。此处触发加载时将加载该Java Bean的所有延迟加载属性关联对象对应的数据。

    默认值:equals,clone,hashCode,toString。  

 -->

<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />

 

 

方式二:在associationcollection使用fetchType属性控制单个语句的延迟加载。

 fetchType:加载方式。

        lazy:延迟加载。

        eager:立即加载。

 

fetchType在使用后会覆盖setting中的全局配置,即使用了fetchType的语句,其延迟加载与否是由fetchType决定。

 

以上是关于MyBatis应用开发(16)延迟加载之概念的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis应用开发(18)延迟加载之延迟加载触发方法(lazyLoadTriggerMethods)

mybatis探究之延迟加载和缓存

JAVAORM框架之Mybatis (Ibatis) 详解

SSM-MyBatis-16:Mybatis中延迟加载

MyBatis从入门到放弃六:延迟加载一级缓存二级缓存

MyBatis从入门到精通—源码剖析之延迟加载源码细节