延迟加载(懒加载)

**

什么是延迟加载(懒加载)

**
resultMap中的association和collection标签具有延迟加载的功能。

延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。需要关联信息时再去按需加载关联信息。这样会大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。

延迟加载又叫懒加载,也叫按需加载。也就是说先加载主信息,在需要的时候,再去加载从信息。

在mybatis中,resultMap标签 的association标签和collection标签具有延迟加载的功能。

验证测试
先测试在没有配置延迟加载时,mybatis操作sql语句次数

OrdersMapper.mxl文件中
查询订单与user表一对一的关系


SELECT * FROM orders

核心:

延迟加载(懒加载)_第1张图片
UserMapper.xml中
延迟加载(懒加载)_第2张图片

测试类中
延迟加载(懒加载)_第3张图片

延迟加载(懒加载)_第4张图片

使用懒加载

SqlMapConfig.xml配置文件中

延迟加载(懒加载)_第5张图片

OrdersMapper.xml文件中

延迟加载(懒加载)_第6张图片

在UserMapper.xml中

延迟加载(懒加载)_第7张图片

测试类中

延迟加载(懒加载)_第8张图片
原因是,代码中没有输出list中的相关信息,所以就没有继续执行sql语句
也就是你只是需要得到OrdersPojo本身对象及其属性信息,并没有想得到user属性

延迟加载(懒加载)_第9张图片

设置积极的懒加载

如果不设置,当你打印如下
也就是只是获取ordersPojo对象的属性时,那么mybatis也会自动将
该对象的user属性查询出来

延迟加载(懒加载)_第10张图片

但如果你设置了积极的懒加载模式
如果没有使用user对象,则也不会执行sql查询user表

延迟加载(懒加载)_第11张图片

使用懒加载完成user表与order表一对多的查询
查询user的id为1的用户所有订单信息
ordersMapper.xml中

在这里插入图片描述

userMapper.xml中
根据id查询

延迟加载(懒加载)_第12张图片

测试类

延迟加载(懒加载)_第13张图片
输出order信息则执行相关sql语句

延迟加载(懒加载)_第14张图片

你可能感兴趣的:(JAVA)