首页 > 代码库 > mybatis(三)懒加载

mybatis(三)懒加载

懒加载的好处:

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

1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强,层次感很强。


2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合

3>只有当真正需要资源时,再去加载,节省了内存资源。

操作步骤:

一、在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语句的地址\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());
        }
    }

技术分享

技术分享

 

注意事项:

技术分享

技术分享

 

 

 

 

 

 

 

 

 

 

 

 

 

mybatis(三)懒加载