mybatis--延迟加载

20 篇文章 0 订阅

延迟加载

一、什么是延迟加载

延迟加载又叫懒加载,也叫按需加载。也就是说先加载主信息,在需要的时候,再去加载从信息。

在mybatis中,resultMap标签的association标签和collection标签具有延迟加载的功能。

 

二、案例

1、需求

查询订单信息,关联查询用户信息

1、  创建一个statement来查询订单信息

2、  创建一个statement来查询用户信息

 

2、映射文件

(1)创建查询订单信息的映射文件

 

<!-- lazyLoadingRstMap -->
	<resultMap type="ordersExt" id="lazyLoadingRstMap">
		<!-- 订单信息 -->
		<id column="id" property="id" />
		<result column="user_id" property="userId" />
		<result column="number" property="number" />
		<!-- 用户信息(一对一) -->
		<!-- select:指定关联查询的查询statement(即查询用户的statement的id),然后将查询结果,封装到property属性指定的变量中 -->
		<!-- column:通过column指定的列所查询出的结果,作为select指的statement的入参 -->
		<!-- 注意:如果select指定的statement,入参需要多个值,需要在column中{col1=prop1,col2=prop2} -->
		<association property="user"
			select="com.hcx.mybatis.mapper.UserMapper.findUserById" column="user_id"></association>
	</resultMap>

	<!-- 延迟加载 -->
	<select id="findOrderAndUserLazyLoading" resultMap="lazyLoadingRstMap">
		SELECT * FROM orders
	</select>
 

 

(2)创建查询用户信息的映射文件
<mapper namespace="mapper.UserMapper">
	<!-- 根据用户ID查询用户信息 -->
	<select id="findUserById" parameterType="int">
		SELECT * FROM USER WHERE id = #{id}
	</select>

3、Mapper接口

//延迟加载
	public List<OrdersExt> findOrderAndUserLazyLoading();

4、测试代码

@Test
	public void testLazyLoading() {
		// 创建OrdersMapper对象
		SqlSession sqlSession = sqlSessionFactory.openSession();

		OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class);

		List<OrdersExt> list = mapper.findOrderAndUserLazyLoading();

		//按需加载时,是需要的时候再去数据库中查找
		for (OrdersExt order : list) {
			System.out.println(order.getUser());
		}
		
		sqlSession.close();
	}

5、设置延迟加载

在SqlMapConfig.xml中,配置settings标签

<settings>
		<!-- 开启延迟加载 ,默认值为true-->
		<setting name="lazyLoadingEnabled" value="true"/>
		
		<!-- 设置积极的懒加载,默认是true -->
		<setting name="aggressiveLazyLoading" value="false"/>
</settings>

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值