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(三)懒加载的更多相关文章
- 关于 Mybatis 设置懒加载无效的问题
看了 mybatis 的教程,讲到关于mybatis 的懒加载的设置: 只需要在 mybatis 的配置文件中设置两个属性就可以了: <settings> <!-- 打开延迟加载的开 ...
- MyBatis使用懒加载mybatis-config.xml配置
在mybatis-config.xml添加如下配置 <settings> <!--要使延迟加载生效必须配置下面两个属性--> <setting name="la ...
- mybatis 详解(八)------ 懒加载
本章我们讲如何通过懒加载来提高mybatis的查询效率. 本章所有代码:http://pan.baidu.com/s/1o8p2Drs 密码:trd6 1.需求:查询订单信息,有时候需要关联查出用户信 ...
- mybatis中的懒加载
知识点:mybatis中的懒加载的使用 参考:https://www.cnblogs.com/ysocean/p/7336945.html?utm_source=debugrun&utm_me ...
- Mybatis 懒加载使用及源码分析
Mybatis 懒加载的使用 什么是懒加载?懒加载的意思就是在使用的时候才去加载,不使用不去加载,相反的就叫饥饿加载或者立即加载.懒加载在Mybatis中一般是存在与联合查询的情况,比如查询一个对象的 ...
- MyBatis --- 映射关系【一对一、一对多、多对多】,懒加载机制
映射(多.一)对一的关联关系 1)若只想得到关联对象的id属性,不用关联数据表 2)若希望得到关联对象的其他属性,要关联其数据表 举例: 员工与部门的映射关系为:多对一 1.创建表 员工表 确定其外键 ...
- 【转】实现ViewPager懒加载的三种方法
方法一 在Fragment可见时请求数据.此方案仍预加载了前后的页面,但是没有请求数据,只有进入到当前Framgent时才请求数据. 优点:实现了数据的懒加载缺点:一次仍是三个Framgment对象, ...
- JPA数据懒加载LAZY配合事务@Transactional使用(三)
上篇博文<JPA数据懒加载LAZY和实时加载EAGER(二)>讲到,如果使用懒加载来调用关联数据,必须要保证主查询session(数据库连接会话)的生命周期没有结束,否则,你是无法抽取到数 ...
- mybatis和hibernate中的懒加载
概念:所谓懒加载就是延时加载,延迟加载.什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载.至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为内存容量有限 ,为了减 ...
随机推荐
- 论文笔记之:A CNN Cascade for Landmark Guided Semantic Part Segmentation
A CNN Cascade for Landmark Guided Semantic Part Segmentation ECCV 2016 摘要:本文提出了一种 CNN cascade (CNN ...
- My Code Snippet
加载菜单(js) function mkmenu(menus,name,id,parentid,url) { $.each(menus,function(i){ menus[i].children=n ...
- C语言 gets()和scanf()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用 gets 函数. gets可以接收空格:而sc ...
- sp_change_users_login解决孤立用户问题
孤立帐户,指的是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录. 孤立帐户的产生一般是一下两种: ...
- [solr] - Facet - autocomplete
Solr的facet可以用于一般性的前缀式自动完成功能,当然,它的主要功能是用于做统计.分类.区间等. 统计.分类.区间功能,可参考下文: http://hongweiyi.com/2013/03/a ...
- ruby md5加签验签方法
# md5签名def md5_sign(data,key) return OpenSSL::Digest::MD5.hexdigest(data+key)end # md5验签def md5_veri ...
- 天嵌E8卡片电脑USBWIFI驱动linux移植
下载驱动:http://pan.baidu.com/s/1sjL0Axn The drivers can be downloaded from Ralink website, the present ...
- 稍览了一下CommonJS
CommonJS是服务器端模块的规范,现在炒得很火的Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后 ...
- 百度地图api简单使用方法
百度地图API的使用方法 百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html&g ...
- 洛谷P3372 【模板】线段树 1
P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...