【Mybatis】Mybatis延迟加载及其原理和延迟加载配置
目录
- 一、概念
- 二、原理
- 三、延迟加载支持的对象
- 四、 配置延迟加载
- 1.配置全局延迟加载
- 2 配置局部延迟加载
- 3.加载顺序
一、概念
MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询。例如在进行一对多查询的时候,只查询出一方,当程序中需要多方的数据时,mybatis再发出sql语句进行查询,这样子延迟加载就可以的减少数据库压力。MyBatis 的延迟加载只是对关联对象的查询有迟延设置,对于主加载对象都是直接执行查询语句的。
二、原理
MyBatis实现延迟加载的方式是使用代理对象,在访问未加载的数据时触发代理对象的方法,从而进行数据的加载。
三、延迟加载支持的对象
Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association 指的就是一对一,collection 指的就是一对多查询。
association 一对一
collection 一对多
四、 配置延迟加载
1.配置全局延迟加载
<settings><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/>settings>
侵入式延迟加载和深入式延迟加载的区别
class 与 student 之间是一对多关系,我们在加载时,可以先加载 class 数据,当需要使用到 student 数据时,我们再加载 student 的相关数据。
- 侵入式延迟加载
侵入式延迟加载指的是只要主表的任一属性加载,就会触发延迟加载,比如:class 的 name 被加载,student 信息就会被触发加载。 - 深度延迟加载
深度延迟加载指的是只有关联的从表信息被加载,延迟加载才会被触发。
通常,我们在实战中更倾向使用深度延迟加载。
2 配置局部延迟加载
<resultMap id="kunkunMap" type="user"><id column="id" property="id">id><result column="ctrl" property="ctrl">result><collection property="userList" ofType="order" column="id"select="com.lagou.dao.OrderMapper.findByUid" fetchType="lazy">collection><association property="order" column="id" javaType="order"select="com.xinxin.dao.OrderMapper.findById" fetchType="lazy">association>
resultMap>
3.加载顺序
局部的加载策略的优先级高于全局的加载策略。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
