Mybatis中的立即加载和延时加载

问题:在一对多中,当我们有一个用户,他有一百个账户。
1、在查询用户时,要不要把关联的账户查出来?
2、在查询账户时,要不要把关联的用户差出来?

解答:
在查询用户时,用户下的账户信息应该是什么时候使用什么时候加载。
在查询账户时,账户的所属用户信息应该是随着账户查询时一起查询出来

延迟加载:
在真正使用数据时才发起查询,不用的时候不查询。也叫按需加载,懒加载
立即加载:
不管用不用,只要一调用方法,马上发起查询。

在对应的四种表关系中:
一对一,多对一:通常情况下我们使用立即加载
一对多,多对多:通常情况下我们使用延迟加载

当不对查询进行延迟加载配置时,所使用的加载就是立即加载。

一对一实现延时加载

1、建立封装表的对象时,将从表设为一个对象作为主表的一个属性。
account的封装类

2、配置xml文件时,用association标签进行配置,并且,要用到从表的方法,把主表的查询结果运用到从表的sql语句中(下图中的column必须配置,后面的findById的Id就从这个配置中拿到。

account的xml配置文件
从表的findById

从表的findById
3、在主配置文件中开启支持延时加载的配置

<setting>
	<!-- 开启全局支持延时加载 -->
	<setting name="lazyLoadingEnabled" value="true"/>
	<setting name="aggressiveLazyLoading" value="false"/>//这个配置在mybatis版本大于3.4.1不用写,默认为false
</settings>

运行效果。执行测试方法时,当我们需要account中的user属性时,才会执行findById去查询过。否则,只会触发IAccountDao中的findAll方法。

当没有用到user属性时
(不用user属性时,只执行了select * from account)

使用了user属性时

(用user属性时,才去数据库中取出user的值)

一对多的延迟加载

一对多的延迟加载和上面的一对一的延迟加载相比,除了***在第一步的创建表的映射对象时,创建一个集合,把“多的”表全部封装起来***之外,其他的地方都是一样的。
不一样的地方

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

/*深林*/

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值