内容简介:延迟加载又叫懒加载,也叫按需加载,也就是说先加载主信息,需要的时候,再去加载从信息。代码中有查询语句,当执行到查询语句时,并不是马上去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性能
- 延迟加载的一些知识和误区
- [译] 网速敏感的视频延迟加载方案
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Coming of Age in Second Life
Tom Boellstorff / Princeton University Press / 2008-04-21 / USD 29.95
The gap between the virtual and the physical, and its effect on the ideas of personhood and relationships, is the most interesting aspect of Boellstorff's analysis... Boellstorff's portrayal of a virt......一起来看看 《Coming of Age in Second Life》 这本书的介绍吧!