码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis的延迟加载

时间:2019-11-09 20:02:02      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:多表   服务   执行   load   value   关联关系   使用   mybatis   策略   

定义:

延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

Mybatis中的延迟加载

当代码执行到查询语句时候,并不是直接到DB中执行select查询语句,而是根据配置好的延迟策略,将查询延迟;来减轻DB服务器的压力;

Mybatis中使用规则:

  1. 只能对关联对象进行查询时使用延迟加载策略;对于主对象直接加载即可;
  2. 只能使用多表单独查询,不能使用多表连接查询(多表连接查询直接可以查询到全部信息)

Mybatis中延迟加载策略分为三种:

  1. 直接加载:执行到查询语句,马上到DB中去执行查询;
  2. 侵入式延迟加载:将关联对象详情侵入到主加载对象中,作为主加载对象的一部分,需要访问主加载对象时,关联对象也会被加载;
  3. 深入延迟加载:访问主加载对象,只会查询主表,不会查询关联表,用到关联对象时才到DB中查询;

配置

  1. 在Mybatis中可以在配置文件中进行配置:
<configuration>
    <!--在此标签下面-->
<settings>
    <!--延迟加载的总开关,默认是深度延迟加载-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!--侵入式延迟加载的开关,在总开关打开时才起作用-->
    <!--<setting name="aggressiveLazyLoading" value="true"/>-->
</settings>
</configuration>
  1. 还可以在resultMap中关联关系中配置:

在association 和collection标签的属性中:

<association property="course"
             javaType="Course"
             fetchType="lazy"
             select="selectCourseById"
             column="courseId"/>

fetchType :数据加载方式,可选值为lazy 和eager ,分别为‘深度延迟加载’和’侵入式延迟加载加载‘,这个配置会覆盖全局的lazyLoadingEnabled 配置;

Mybatis的延迟加载

标签:多表   服务   执行   load   value   关联关系   使用   mybatis   策略   

原文地址:https://www.cnblogs.com/gbetter/p/11827248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!