Java神鬼莫测之MyBatis多表操作延迟加载(四)
MyBatis多表操作延迟加载
延迟加载设置
延迟加载原理
使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用A.getB().getName(),拦截器invoke()方法发现A.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用A.setB(b),于是a的对象b属性就有值了,接着完成A.getB().getName()方法的调用。这就是延迟加载的基本原理。
1.对一操作:
<resultMap id="orderMap" type="order"><result property="id" column="id"></result><result property="ordertime" column="ordertime"></result><result property="total" column="total"></result><!-- 当查询order的时候,mybatis会把查询结果中的uid列中的数据,一个一个拿出来,然后调用 UserMapper.findById方法,查询数据,并把查询到数据,封装到order对象的user属性中。--><association property="user" javaType="user"select="com.demo.dao.UserMapper.findById" column="uid"></association>
</resultMap><!-- 获取所有的order -->
<select id="findAll" resultMap="orderMap">SELECT * FROM orders
</select><!-- 根据用户id,查询对应的所有的订单 -->
<select id="findByUid" resultType="order">SELECT * FROM orders WHERE uid = #{uid}
</select>
2.对多操作:
<resultMap id="userMap" type="user"><result property="id" column="id"></result><result property="username" column="username"></result><result property="password" column="password"></result><result property="birthday" column="birthday"></result><!-- 当查询user的时候,mybatis会把查询结果中的id列中的数据,一个一个拿出来,然后调用 OrderMapper.findByUid方法,查询数据,并把查询到数据,封装到user对象的orders属性中。--><collection property="orders" ofType="order" select="com.demo.dao.OrderMapper.findByUid" column="id"> </collection>
</resultMap><!-- 获取所有用户 -->
<select id="findAll" resultMap="userMap">select * from user
</select><!-- 根据用户id,获取用户 -->
<select id="findById" resultType="user">select * from user where id = #{id}
</select>
3.延迟加载(懒加载)
什么是延迟加载?
在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)
什么是立即加载?
不管用不用,只要一调用方法,马上发起查询。
<!-- 在SqlMapConfig文件中,开启mybatis的懒加载机制 -->
<settings><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/>
</settings>
Java神鬼莫测之MyBatis多表操作延迟加载(四)相关推荐
- 第69节:Java中数据库的多表操作
第69节:Java中数据库的多表操作 前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文 ...
- java mysql单库多表_第69节:Java中数据库的多表操作
第69节:Java中数据库的多表操作 前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文 ...
- mybatis多表操作(一对一、一对多、多对多)
1.获取主键值 1.1使用useGeneratedKeys属性 1.2使用selectKey标签 修改UserMapper 2.分页 3.多表操作(重难点) 3.1一对一 需求:(电商)[一个用户对应 ...
- Mybatis多表操作
文章目录 前言 一.一对一操作 数据库环境 Mapper.xml文件的编写 功能实现 遇到的问题 关于mybatis中起别名的问题 二.一对多操作 数据库环境 Mapper.xml的编写 功能实现 小 ...
- Java中数据库的多表操作
前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文章,会上瘾!,帮你成为更好的自己. 感 ...
- java map 查找_Map 查找表操作
packageseday13;importjava.util.HashMap;importjava.util.Map;/***@authorxingsir * java.util.Map 查找表,Ma ...
- Java神鬼莫测之MyBatis注解开发之动态SQL语句(六)
1.Mybatis注解开发之动态SQL语句 背景:使用mybatis的注解开发动态Sql会比较麻烦, 很不方便, 所以不太推荐使用,该文章以查询作为案例,演示动态sql语句. 注意:Mybatis的动 ...
- openvswitch 流表操作(四十八)
流表组成 每条流表规则由一些列字段组成,可以分为基础字段.匹配字段和动作字段三部分. 在打印流表时,在流表中还存在一些显示字段,如duration,idle_age等,此处把这些字段也暂时归之于基础字 ...
- java B2B2C springmvc mybatis电子商城系统(四)Ribbon
2019独角兽企业重金招聘Python工程师标准>>> 一:Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix ...
- SSM-Mybatis进阶了解(动态SQL和多表操作)
Mybatis进阶 MyBatis 接口代理方式实现 Dao 层 接口代理方式-实现规则 传统方式实现 Dao 层,我们既要写接口,还要写实现类.而 MyBatis 框架可以帮助我们省略编写 Da ...
最新文章
- 0.基于C++的图像处理算法实现、INTEL CPU上SSE加速、ARM CPU上NEON加速
- 最强 Android Studio 使用小技巧和快捷键
- 机器学习流行算法一览
- 一个讨论:SAP项目实施的顾问,需要花时间去调试代码了解技术细节吗
- 表单新增元素与属性(control、placehoulder、list、AutoComplete、pattern、SelectionDirection、indeterminate属性)
- REVERSE-PRACTICE-BUUCTF-5
- 时间序列预测系统α版本迭代总结
- android bundle传递参数,android – 使用bundle将数据从一个活动传递...
- 如何针对业务设计架构?——QCon热点专题前瞻
- HDU 1010 深搜+奇偶剪枝
- ceph分布式存储简介
- matlab求抛物问题,高手进,用matlab求解一维抛物方程的初边值问题 - 数学 - 小木虫 - 学术 科研 互动社区...
- 好用的在线JSON编辑与格式化工具
- oracle---SQLPlus命令操作用法详解
- c语言输出n转义字符串,C语言转义字符介绍和示例
- Shader攻占笔记(九)结课作业小记
- Linux磁盘分区及格式化简介,Linux硬盘分区及格式化学习笔记
- 论文翻译——Facial Emotion Recognition using Deep Convolutional Networks
- 易基因|疾病研究:DNA甲基化与转录组分析联合揭示吸烟免疫相关疾病的表观遗传机制
- 如何查看IDM下载文件的属性