lazyLoadingEnabled和aggressiveLazyLoading作用

  1. N+1问题:假设现在有N个关联关系完成了级联,那么只要再引入一个关联关系,就变成了N+1级联,所有级联的SQL都会被执行,显然会有很多我们不需要的数据被加载进来,这就造成了极大的资源浪费。
  2. 引入延迟加载的目的:为了处理N+1问题(级联加载的性能问题)
  3. MyBatis的配置文件中两个全局配置可以配置延迟加载 ,如下:
    
          
        
        
        
  

     如果设置 lazyLoadingEnabled = false,则禁用延迟加载,会级联加载所有关联对象的数据
     如果设置 lazyLoadingEnabled = true,默认情况下mybatis 是按层级延时加载的。
     如果在设置了1.1 后,使用 aggressiveLazyLoading 可以按需加载。
     aggressiveLazyLoading = true,mybatis 是按层级延时加载
     aggressiveLazyLoading = false,mybatis 按需求加载。

  1. 有时全局配置不是那么的适合自己需求,mybatis 提供了局部延时加载功能。
    在 collection 或 association 元素上加入属性值 fetchType 就可以了,他有两个取值 eager 和 lazy。

你可能感兴趣的:(MyBatis)