zoukankan      html  css  js  c++  java
  • 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

     

    学习中,博客都是自己学习用的笔记,持续更新改正。。。
  • 相关阅读:
    MYSQL 使用DBI
    mysql 更改数据目录
    Error Code: 1360
    org.hibernate.exception.GenericJDBCException: Could not open connection
    Error: Dynamic is undefined
    Unhandled event loop exception No more handles
    Count:858org.apache.jasper.JasperException: Unable to compile class for JSP
    Mysql --skip-grant-table
    第24章-启动 停止 和配置mysql
    Linux 6.2 x86_64 安装ipvs
  • 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11780104.html
Copyright © 2011-2022 走看看