• Mybatis_查询延迟加载/查询


    存在联表查询中;联表查询必须是多表单独查询

    概念:将查询的时机推迟

    单表查询:不存在延迟查询

    联表查询:

          多表一次查询:不存在延迟查询

          多表单独查询:会执行多条sql语句,才会存在延迟查询。

    目的:只立马执行需要的数据的sql语句

    比如:用户和地址数据

          两条sql语句

          select * from tuser where id = ?       需要立马执行的

          select * from taddress where aid = ?   可以延迟执行,在获取用户的地址的时候才执行

    好处:减小数据库的压力

    Mybatis的延迟加载方式:

    直接加载

    执行完主对象的sql语句之后,立马执行关联对象的sql语句

    配置

    配置Mybatis的主配置文件:

          主配置文件中在proerties标签和typeAliaes标签之间可以配置settings的标签,用来配置全局配置的。

    开启延迟加载的属性:

    lazyLoadingEnabled:全局性设置懒加载。如果设为‘false’,则所有相关联的sql都会立即执行。默认为false

    aggressiveLazyLoading:当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。默认为true

    侵入式延迟加载

    执行完主对象的sql语句之后,不会立即执行关联对象的sql语句,当访问主对象中的数据时才会执行关联对象的sql语句。

    User{id,name,money,birthday,Address address}

    User u = userDao.listById(11);

    u.getId()的时候立马执行关联sql语句的查询,查询address的数据

    配置

    运行结果

    当没有取获取主对象的属性的值的时候,关联对象的sql语句不执行

    当调用对象的属性的值的时候,才执行关联对象的sql语句

    深度延迟加载

    User{id,name,money,birthday,Address address}

    User u = userDao.listById(11);

    u.getId()

    当执行u.getId()的时候还是不会执行关联对象的sql语句

    当执行u.getAddress() ()当获取关联对象里面数据的时候才执行关联对象的sql语句

    配置

    运行结果

    总结

    直接加载:

          lazyLoadingEnabled:false

    aggressiveLazyLoading:false

    侵入式延迟加载:

          lazyLoadingEnabled:true

    aggressiveLazyLoading:true

    深度延迟加载

          lazyLoadingEnabled:true

    aggressiveLazyLoading:false

     

    学习中,博客都是自己学习用的笔记,持续更新改正。。。
  • 相关阅读:
    python3与Excel的完美结合
    Python3连接MySQL
    Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密
    Jmeter 接口测试之MD5加密函数(函数助手篇)
    ubuntu16.04安装python3
    解释Crypto模块怎么就这么"皮"?No module named "Crypto"
    python3 django 安装
    未授权访问的缺陷原理的一种可能性
    一篇RPO漏洞挖掘文章翻译加深理解。
    漏洞挖掘技巧之利用javascript:
  • 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11780104.html
Copyright © 2020-2023  润新知