美文网首页
chapter-5--延迟加载(lazyLoadingEnabl

chapter-5--延迟加载(lazyLoadingEnabl

作者: john_leventon | 来源:发表于2019-01-31 18:31 被阅读0次

一、lazyLoadingEnabled和aggressiveLazyLoading

mybatis的基础配置文件

我们可以在<settings>元素中配置延迟加载如下示例:

<setting name="lazyLoadingEnabled" value="true" />   <!-- 默认为false -->

<setting name="aggressiveLazyLoading" value="true" /> <!-- 3.4.1(包含)之前为true,之后为false -->

lazyLoadingEnabled和aggressiveLazyLoading常常一起使用,他们一起使用有以下两种不同的起作用的情况:

1、 lazyLoadingEnabled: true/false    aggressiveLazyLoading: true 

这种情况下,会依层次分别延迟加载,但是不管POJO这个属性是否被调用都会加载进来,举个例子:

映射文件:

<mapper namespace="com.learn.mybatis.chapter05.cascading.EmployeeMapper">

  <resultMap type="com.learn.mybatis.chapter05.cascading.Employee" id="employee">

    <id column="id" property="id" />

    <result column="real_name" property="realName" />

    <result column="sex" property="sex"

    typeHandler="com.learn.mybatis.chapter04.typehandler.SexEnumTypeHandler" />

    <result column="birthday" property="birthday" />

    <result column="mobile" property="mobile" />

    <result column="email" property="email" />

    <result column="position" property="position" />

    <result column="note" property="note" />

    <association property="workCard" column="id"

    select="com.learn.mybatis.chapter05.cascading.WorkCardMapper.getWorkCardByEmpId" />

    <collection property="employeeTasks" column="id"

    select="com.learn.mybatis.chapter05.cascading.EmployeeTaskMapper.getEmployeeTaskByEmpId" />

    <discriminator javaType="long" column="sex">

      <case value="0" resultMap="MaleHealthFormMapper" />

      <case value="1" resultMap="femaleHealthFormMapper" />

    </discriminator> 

  </resultMap>

  <resultMap type="com.learn.mybatis.chapter05.cascading.FemaleEmployee"

  id="femaleHealthFormMapper" extends="employee">

      <association property="femaleHealthForm" column="id"

      select="com.learn.mybatis.chapter05.cascading.FemaleHealthFormMapper.getMaleHealthForm" />

  </resultMap>

  <resultMap type="com.learn.mybatis.chapter05.cascading.MaleEmployee"

  id="MaleHealthFormMapper" extends="employee">

      <association property="maleHealthForm" column="id"

      select="com.learn.mybatis.chapter05.cascading.MaleHealthFormMapper.getMaleHealthForm" />

  </resultMap>

从映射文件中我们可以提炼出如下的层次关系:

discriminator元素中指定的resultMap中的association级联关系会同实体一起首先被加载进来,上述例子中的Employee员工实体和实体中的体检表级联属性会首先加载进来,然后是雇员任务和工卡(这两个属性都位于id为employee的resultMap中的association元素中所以它们是同一层),最后是任务(任务雇员任务存在直接的级联而与员工实体存在间接的级联,所以它和雇员任务及工卡不是一层)被加载进来。

2、lazyLoadingEnabled: true   aggressiveLazyLoading: false

这种情况下,只有实体主体被加载进来,其它的级联属性只有当被调用时才会被加载,这里也没有分层次加载,

一句话总结就是用到的时候才会加载。

二、fetchType

上述的设置都是针对全局的,在某些情况下不够灵活。比如负责员工任务信息分配的领导只关心雇员实体和雇员任务的级联关系,其它的如工卡与雇员实体的级联关系则不需要关注,但是工卡和雇员任务恰恰和雇员实体都是同一层的直接级联关系。这时候就需要用fetchType单独为某个级联关系设置是否延迟加载。

需要特别注意的时fetchType属性只能在association和collection中进行设置,discriminator没有这个属性。

fetchType的取值有两个:

eager: 获得当前的POJO后立即加载对应的数据。

lazy:获得当前的POJO后延迟加载对应的数据。

说句废话,fetchType属性的优先级是高于全局属性的,会覆盖它们。

相关文章

  • chapter-5--延迟加载(lazyLoadingEnabl

    一、lazyLoadingEnabled和aggressiveLazyLoading 我们可以在 元素中配置延迟加...

  • 懒加载和预加载

    1)概念: 懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加载:提前加载图片...

  • JS

    JS 懒加载,预加载 概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加...

  • 图片懒加载

    懒加载与预加载的基本概念。 懒加载也叫延迟加载:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片。 预...

  • mybatis 延迟加载

    mybatis 延迟加载 什么是延迟加载 延迟加载又叫懒加载,也叫按需加载,也就是说先加载主信息,需要的时候,再去...

  • 单例模式

    延迟加载 延迟加载是指等到真正使用时去创建实例,不使用时不创建实例 对比延迟加载(懒汉式)和非延迟加载(饿汉式):...

  • js延迟加载的六种方式

    js实现延迟加载的几种方法,js的延迟加载有助与提高页面的加载速度 JS延迟加载,也就是等页面加载完成之后再加载 ...

  • 深入理解js

    延迟加载 (Lazyload) 三种实现方式 延迟加载也称为惰性加载,即在长网页中延迟加载图像。用户滚动到它们之前...

  • js 实现图片懒加载

    一、懒加载 懒加载也叫延迟加载,Js中图片的延迟加载,延迟图片需要符合某些条件时才加载;对于图片过多的页面,为了加...

  • javascript图片懒加载与预加载的分析

    懒加载与预加载的基本概念。 懒加载也叫延迟加载:前一篇文章有介绍:JS图片延迟加载 延迟加载图片或符合某些条件时才...

网友评论

      本文标题:chapter-5--延迟加载(lazyLoadingEnabl

      本文链接:https://www.haomeiwen.com/subject/pcklsqtx.html