mybatis延迟加载(八)

1、什么是延迟加载

就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载.好处:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。

坏处 :

因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗时间,所以可能造成用户等待时间变长,造成用户体验下降

(1)使用 assocation 实现延迟加载

这里我们使用account查询对应user用户表

AccountDao.xml配置
<!--建立对应关系-->
<resultMap id="accountMap" type="account">
    <id column="id" property="id"/>
    <result column="uid" property="uid"/>
    <result column="money" property="money"/>
    <!--它是用来指定从表的引用实体属性的
    select : 填写我们要调用的 select 映射的 id
    column : 填写我们要传递给 select 映射的参数
    -->
    <association property="user" javaType="user"
                 select="com.shenqiang.dao.UserDao.findById" column="uid">

    </association>

在SqlMapConfig.xml文件中开启延迟加载

<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>

最后我们在AccountTest中执行测试方法:

@Test
    public void testFindAll() {
//6.执行操作
        List<Account> accounts = accountDao.findAll();
        for(Account au : accounts) {
            System.out.println(au);
            System.out.println(au.getUser());
        }
    }

最终运行结果如下:

 

(2)使用collection进行延迟加载

collection延迟加载和association加载类似我们只需要将association替换就行

UserDao.xml配置
<resultMap id="userMap" type="user">
    <id column="id" property="userId"/>
    <result column="username" property="userName"/>
    <result column="address" property="userAddress"/>
    <result column="sex" property="userSex"/>
    <result column="birthday" property="userBirthday"/>

    <!-- collection 是用于建立一对多中集合属性的对应关系
    ofType 用于指定集合元素的数据类型
    select 是用于指定查询账户的唯一标识(账户的 dao 全限定类名加上方法名称)
    column 是用于指定使用哪个字段的值作为条件查询
    -->
    <collection property="accounts" ofType="account"
                select="com.shenqiang.dao.AccountDao.findByUid" column="id">

    </collection>
</resultMap>

具体查询效果如下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值