zoukankan      html  css  js  c++  java
  • java# 认识mybatis# 应用篇# 延迟加载

    ## 什么事延迟加载

    - mybatis的延迟加载也成为懒加载,是指进行关联查询时,按照设置延迟规则延迟对关联对象的select查询。延迟加载可以有效的减少数据库的压力。

    - Mybatis的延迟加载,需要通过resultMap标签中的association和collection子标签才能演示成 功。

    - Mybatis的延迟加载,也被称为是嵌套查询,对应的还有嵌套结果的概念,可以参考一对多关联的 案例。

    - 注意:MyBatis的延迟加载只是对关联对象的查询有延迟设置,对于主加载对象都是直接执行查 询语句的。

    ## 延迟加载的分类

    MyBatis根据对关联对象查询的select语句的执行时机,分为三种类型:直接加载、侵入式加载与深度 延迟加载

    - 直接加载: 执行完对主加载对象的select语句,马上执行对关联对象的select查询。

    - 侵入式延迟:执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象的 某个属性(该属性不是关联对象的属性)时,就会马上执行关联对象的select查询。

    - 深度延迟:执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也 不会执行关联对象的select查询。只有当真正访问关联对象的详情时,才会执行对关联对象的 select查询。

    延迟加载策略需要在Mybatis的全局配置文件中,通过标签进行设置。

    ## 延迟加载配置

    #### 直接加载

    ```

    <settings>    

      <!-- 延迟加载总开关 -->    

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

    </settings>

    ```

    #### 侵入式延迟加载

    ```

    <settings>    

      <!-- 延迟加载总开关 -->    

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

      <!-- 侵入式延迟加载开关 -->    

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

    </settings>

    ```

    #### 深度延迟加载

    ```

    <settings>    

      <!-- 延迟加载总开关 -->    

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

      <!-- 侵入式延迟加载开关 -->    

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

    </settings>

    ```

    #### N+1问题

    - 深度延迟加载的使用会提升性能。 

    - 如果延迟加载的表数据太多,此时会产生N+1问题,主信息加载一次算1次,而从信息是会根据主 信息传递过来的条件,去查询从表多次。 

  • 相关阅读:
    数据结构与算法 -- 动态规划算法
    数据结构与算法 -- 回溯算法
    数据结构与算法 -- 图
    数据结构与算法无用随笔
    算法集锦
    基于Zookeeper实现多进程分布式锁
    自己动手写线程池
    maven配置国内阿里云镜像
    自己动手写java锁
    使用jconsole监控JVM内存
  • 原文地址:https://www.cnblogs.com/xy-c/p/14308771.html
Copyright © 2011-2022 走看看