码迷,mamicode.com
首页 > 其他好文 > 详细

查询延迟加载/查询

时间:2019-11-02 00:18:53      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:相关   inf   ssi   技术   loading   agg   没有   span   load   

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

 

概念:将查询的时机推迟

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

联表查询:

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

      多表单独查询:会执行多条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

 

 

查询延迟加载/查询

标签:相关   inf   ssi   技术   loading   agg   没有   span   load   

原文地址:https://www.cnblogs.com/Tunan-Ki/p/11780104.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!