mybatis中的延迟加载

mybatis中的延迟加载

问:在一对多中,当我们有一个用户有100个账户。

  1. 当查询用户时,要不要把关联的账户查出来?
  2. 当查询账户时,要不要把关联的用户查出来?

1.所以,在查询用户时,用户下的账户信息应该是,什么时候使用,什么时候查询。

2.在查询账户时,账户的所属信息应该是随着账户查询时一起查询出来(查询时机)

  • 什么是延迟加载

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

  • 什么是立即加载

    不管用不用,只要一定义方法,马上发起查询。

在对应的四种表关系:一对一,多对一,一对多,多对多中

一对多,多对多:通常情况下都是采用延迟加载;

一对一,多对一:通常情况下都是采用立即加载。

使用Association实现延迟加载

当学会了mybatis多表操作时,在多表操作的基础上引入延迟加载,对于多表的连接操作,在association标签中可以不出现column属性,但是延迟加载中,column属性是必须的。

AccountDao.xml

<mapper namespace="com.lut.dao.IAccountDao">
    <resultMap id="accountUserMap"type="com.lut.domain.Account">
            <id property="Id" column="id"></id>
            <result property="Uid" column="uid"></result>
            <result property="Money" column="money"></result>
            <association property="User" column="uid" select="com.lut.dao.IUserDao.selectOne" javaType="com.lut.domain.User">
            </association>
    </resultMap>
    <!-- 配置查询所有-->
    <select id="findAll" resultMap="accountUserMap">
        select * from account;
    </select>
</mapper>

UserDao.xml

<mapper namespace="com.lut.dao.IUserDao">
    <select id="selectOne" parameterType="com.lut.domain.User" resultType="com.lut.domain.User">
        select * from user where id = #{id};
    </select>
</mapper>

上面两个xml是在两个不同的配置文件中,当查询账户时把用户也查询出来,也可以用这种方式。

这种方式中,表示要进入的Dao接口中的方法名,如要引用别的类,就要写全路径名
在这里插入图片描述
这就表示查询账户的时候级联查询出用户信息

而用户配置文件的查询语句中传进来的参数,在此时就是column中的参数,换句话说,当association标签中的select属性级联到UserDao.xml中通过id查询用户的语句时,随之携带过去的还有column属性中表示的参数,填入#{id}

这时,我们已经找到了可以实现立即查询的两种方式,一种是上篇的连接查询,一种就是级联查询

当我们要实现延迟加载(懒加载)时,就要在mybatis配置文件的settings标签中加一个配置

<setting name="lazyLoadingEnabled" value="true"/>

加了这个配置之后,就可以实现延迟加载。
当只执行查询账户的方法时,当需要携带用户时,就能查询出用户。
下一篇
mybatis中的缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值