懒加载的好处:
所谓懒加载(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()+" "+emp.getSal()); } }
注意事项: