内容简介:延迟加载又叫懒加载,也叫按需加载,也就是说先加载主信息,需要的时候,再去加载从信息。代码中有查询语句,当执行到查询语句时,并不是马上去DB中查询,而是根据设置的延迟策略将查询向后推迟。配置之后在对关联对象进行查询时使用延迟加载。遇到代码中查询语句,马上到DB中执行select语句进行查询。(这种只能用于多表单独查询)
mybatis 延迟加载
什么是延迟加载
延迟加载又叫懒加载,也叫按需加载,也就是说先加载主信息,需要的时候,再去加载从信息。代码中有查询语句,当执行到查询语句时,并不是马上去DB中查询,而是根据设置的延迟策略将查询向后推迟。
什么时候会执行延迟加载
配置之后在对关联对象进行查询时使用延迟加载。
延迟加载策略
直接加载
遇到代码中查询语句,马上到DB中执行select语句进行查询。(这种只能用于多表单独查询)
侵入式延迟加载
将关联对象的详情(具体数据,如id、name)侵入到主加载对象,作为主加载对象的详情的一部分出现。当要访问主加载对象的详情时才会查询主表,但由于关联对象详情作为主加载对象的详情一部分出现,所以这个查询不仅会查询主表,还会查询关联表。
深度延迟加载
将关联对象的详情(具体数据,如id、name)侵入到主加载对象,作为主加载对象的详情的一部分出现。当要访问主加载对象的详情时才会查询主表,但由于关联对象详情作为主加载对象的详情一部分出现,所以这个查询不仅会查询主表,还会查询关联表。
使用延迟加载的目的
减轻DB服务器的压力,因为我们延迟加载只有在用到需要的数据才会执行查询操作。
配置
<settings> <setting name ="aggressiveLazyLoading" value="false"/> <!--开启延迟加载--> <setting name="lazyLoadingEnabled" value="true"/> </settings>
我们用关联查询来实现延迟加载,假设我们现在要查出用户和用户角色。
首先我们在user中添加查询userVo的方法和xml。
<resultMap id="BaseResultMap" type="com.redstar.basemapper.pojo.User"> <id column="id" jdbcType="VARCHAR" property="id"/> <result column="name" jdbcType="VARCHAR" property="name"/> <result column="age" jdbcType="INTEGER" property="age"/> <result column="role_id" jdbcType="INTEGER" property="roleId"/> </resultMap> <resultMap id="userRoleMapSelect" type="com.redstar.basemapper.pojo.UserVo"> <association property="role" fetchType="lazy" column="{id=role_id}" select="com.redstar.basemapper.dao.RoleMapper.getRoleById"/> </resultMap> <select id="getUserVo" resultMap="userRoleMapSelect"> select * from user where id=#{userId} </select> <resultMap id="BaseResultMap" type="com.redstar.basemapper.pojo.Role"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="role_name" jdbcType="VARCHAR" property="roleName" /> </resultMap> <sql id="Base_Column_List"> id, role_name </sql> <select id="getRoleById" resultMap="BaseResultMap"> select * from role where id=#{id} </select>
测试用例
@RunWith(SpringRunner.class) @SpringBootTest public class BaseMapperApplicationTests { @Autowired private UserMapper userMapper; @Autowired private RoleMapper roleMapper; @Test public void getUserVo() { System.out.println(userMapper.getUserVo("12312232")); // System.out.println(userMapper.getUserById("12312232")); // System.out.println(roleMapper.getRoleById(1)); } }
输出结果:
UserVo{user=null, role=Role [Hash = 2140396878, id=1, roleName=admin, serialVersionUID=1]}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 介绍同步加载、异步加载、延迟加载[原创]
- mybatis教程--延迟加载详解
- mybatis教程--延迟加载详解
- 使用延迟加载提升SPA性能
- 延迟加载的一些知识和误区
- [译] 网速敏感的视频延迟加载方案
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
快速傅里叶变换
K. R. Rao、D. N. Kim、J. J. Hwang / 万帅、杨付正 / 机械工业出版社 / 2013-3 / 98.00元
《国际信息工程先进技术译丛·快速傅里叶变换:算法与应用》深入浅出地阐述了快速傅里叶变换(FFT)的原理,系统地总结了各类FFT算法,并广泛精辟地介绍了FFT在视频和音频信号处理中的各种应用。《国际信息工程先进技术译丛·快速傅里叶变换:算法与应用》在阐述了离散傅里叶变换(DFT)的原理和性质之后,详细讨论了时域抽取(DIT)和频域抽取(DIF)的各类快速算法。论述了近似计算DFT的整数FFT、二维及......一起来看看 《快速傅里叶变换》 这本书的介绍吧!