zoukankan      html  css  js  c++  java
  • 12、mybatis学习——mybatis懒加载的设置

    MyBatis的Lazy Loading可以实现延迟查询Bean里的嵌套成员类,控制lazy loading的<settings>属性有

    lazyLoadingEnabled: lazy loading开关

    aggressiveLazyLoading: 侵略性 lazy loading 开关

    设置项 描述 允许值 默认值
    lazyLoadingEnabled

    全局性设置懒加载。

    如果设为‘false’,

    则所有相关联的都会被初始化加载。

    true | false 3.4.1后为false
    aggressiveLazyLoading

    当设置为‘true’的时候,

    懒加载的对象可能被任何懒属性全部加载。

    否则,每个属性都按需加载。

    true | false 3.4.1后为true

    延迟加载

      延迟加载对主对象都是直接加载,只有对关联对象是延迟加载。

      延迟加载可以减轻数据库的压力,

      延迟加载不可是一条SQL查询多表信息,这样构不成延迟加载,会形成直接加载。

    延迟加载分为三种类型:

    1.直接加载

    执行完主对象之后,直接执行关联对象。

    2.侵入式加载

    在执行主对象详情的时候,执行关联对象。

    3.深度延迟加载

    执行完主对象或主对象详情不会执行关联对象,只有用到关联对象数据的时候才走深度延迟加载。

    看一下几个例子

      1.默认情况的延迟加载 

    (这是在MyBatis3.4.1版本之前的默认情况) :(aggressiveLazyLoading)侵入式延迟加载为true, 在3.4.1之后的版本(aggressiveLazyLoading)侵入式延迟加载默认值为false

      2.侵入式延迟加载

    现在看一下访问主属性的侵入式延迟加载的状态如何

       3.深度延迟加载

    深度延迟加载 大配置中的设置

    只访问主对象的属性,深度延迟加载的状态为:

    现在我们看一下访问关联对象的属性,深度延迟加载的状态为:

    我现在用的mybatis3.5.3的默认值为:
    <settings>
    <setting name="lazyLoadingEnabled" value="false"/>
    <setting name="aggressiveLazyLoading" value="true"/> <!--现在的状态为直接加载-->(3.4.1版本之后的直接加载设置)
    </settings>

    所以改为深度延迟加载即
    <settings>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"/>
    </settings>

    反正建议修改懒加载时这两个设置项同时修改(这样就不用管版本的默认值)
  • 相关阅读:
    java获取本机IP和主机名
    SSH框架总结(框架分析+环境搭建+实例源代码下载)
    Centos7安装mysql8教程
    jquery 操作HTML data全局属性缓存的坑
    mysql协议分析2---认证包
    mysql协议分析1---报文的格式和基本类型
    TCP三次握手抓包理解
    java读写文件小心缓存数组
    spring 事务隔离级别导致的bug
    mysql 不同版本下 group by 组内排序的差异
  • 原文地址:https://www.cnblogs.com/lyh233/p/12349662.html
Copyright © 2011-2022 走看看