Mybatis延迟加载

延迟加载

  • 延迟加载:真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)。

优点:先从单表查询,需要时再从关联表去关联查询,大大提高了数据库的性能,因为查询单表要比关联查询多张表的速度快的多。

  • 立即加载:不管用不用,只要一调用方法,马上发起查询。

如何实现延迟加载


 - 我们在进行多表的操作时,在配置文件中通过resultMap实现一对多、
  多对一和一对一关系的操作,主要是通过association、collection
  具备延迟加载功能。

一对一方式延迟加载

  1. 第一步:在SqlMapConfig.xml(配置文件)中配置延迟加载的全局开关,可取Mybatis官网参考配置
    在这里插入图片描述
    在这里插入图片描述
 <!-- 开启Mybatis支持延迟加载-->
    <settings>
        <setting name="lazyLoadingEnabled" value="true"></setting>
        <setting name="aggressiveLazyLoading" value="false"></setting><!--在3.4.1版本及其之后不用再写aggressiveLazyLoading 因为其默认值为false-->
    </settings>
  1. 第二步:在resultMap中设置association .
<!--定义封装account和user的resultMap-->
    <resultMap id="accountUserMap" type="Account">
        <!--前三只能保证account的数据封装-->
        <id property="id" column="id"></id>
        <result property="uid" column="uid"></result>
        <result property="money" column="money"></result>
        <!--select指定的内容,查询用户的唯一标识(namespace+id)
        column属性指定的内容:用户根据id查询时,所需要的参数的值(account表的外键)-->
        <association property="user" column="uid" select="com.itheima.dao.IUserDao.findById"></association>
    </resultMap>

测试:
在这里插入图片描述
延迟加载成功!
在这里插入图片描述

一对多方式延迟加载

   <!--配置user对象中的的accounts集合的映射-->
        <collection property="accounts" ofType="com.itheima.domain.Account" select="com.itheima.dao.IAccountDao.findAccountByUid" column="id">
        </collection>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值