mybatis的懒加载

懒加载的好处:所谓懒加载(lazy)就是延时加载,延迟加载。什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载。至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,
因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,我们让数据在需要的时候才进行加载,这时我们就用到了懒加载。

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

操作步骤:
一、在mybatis配置文件中打开启用懒加载
config.xml:

<!-- 三、懒加载 -->
    <settings>  
        <!--  打开延迟加载的开关  -->  
        <setting name="lazyLoadingEnabled" value="true" />  
        <!--  将加载改为按需加载  -->  
        <setting name="aggressiveLazyLoading" value="false"/>  
    </settings> 

二、在映射sql语句的xml中配置运用懒加载
dept.xml:

 <resultMap type="Dept" id="DeptList2">
        <result column="deptno" property="deptno"/>
        <result column="dname" property="dname"/>
        <result column="loc" property="loc"/>
<!--        懒加载内容:::-->
<!--        property:查询数据的实体类型  \select:sql语句的地址,指定延迟加载去执行的statement的id\ ofType:语句对应实体。-->
<!--            column:至关重要,表关联的查询关联字段可能不尽一样,但是以主表字段为纽带,让另一张表的查询字段去用它的值查询,-->
<!--                该字段错误,主表可以得到数据,懒加载会报空指针异常。\-->
        <collection property="emps" 
            select="com.ckx.entityMapper.Emp.selectEmps2"  column="deptno" ofType="Emp">
        </collection>
    </resultMap>

    <select id="selectDeptNo" parameterType="int" resultMap="DeptList2">
        SELECT * FROM dept WHERE DEPTNO = #{deptno};
    </select>

注意:在selectDeptNo中我们至于要知道需要查询的部门的数据,但他的返回值resultMap=”DeptList2”是个集合,请注意,并且在该集合里配置了

职员表的懒加载,在我们需要的术后,懒加载才会帮我们去加载相对部门的职员信息。
三、运行测试

DeptTest.java:

public void selectDeptNo(){
        DeptDao dao = sqlSession.getMapper(DeptDao.class);
        Dept d = dao.selectDeptNo(20);
        System.out.println(d.getDname());
        List<Emp> list = d.getEmps();
        for (Emp emp : list) {
            System.out.println(emp.getEname()+"\t"+emp.getSal());
        }
    }

这里写图片描述
|—————————————————
这里写图片描述

注意事项:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值