mybatis 懒加载

mybatis提供了懒加载机制, 需要使用resultMap才能使用懒加载机制(resultType不支持懒加载)


全局配置文件:

	<settings>
		<!-- 两个属性组合使用,才能使懒加载生效 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<setting name="aggressiveLazyLoading" value="false"/>
	</settings>


懒加载方式查询订单及其所属用户:

查询订单, 当使用到用户的属性时才去查询用户的信息。

	
	<resultMap type="com.changez.sm.base.bean.Orders" id="lazyQueryOrderAndUser">
		<id column="id" property="id"/>
		<result column="user_id" property="userId"/>
		<result column="order_num" property="orderNum"/>
		<result column="create_time" property="createTime"/>
		<association property="user" javaType="com.changez.sm.base.bean.User" 

		column="user_id" //传递结果集中的user_id值到select指定的statementsql语句以作为参数
		select="com.changez.sm.mapper.UserMapper.getUserById">
			
		</association>
		
	</resultMap>
	查询订单信息时, 懒加载查询用户信息
	<select id="queryOrderAndUserLoading" resultMap="lazyQueryOrderAndUser">
		SELECT t.* from temp_changez_orders t  where t.id=3
	</select> 

查询用户信息:

	<select id="getUserById" parameterType="string" resultType="user">
		select * from temp_changez_user t where t.id=#{id} 
	</select>

测试代码:

	@Test
	public void lazyLoading() {
		OrdersController ordersController = (OrdersController) applicationContext.getBean("ordersController");
		// 使用懒加载, 最开始仅会查询orders的信息,可以查看控制台日志,当前近执行了查询orders表的sql
		Orders a = ordersController.queryOrderAndUserLoading();
		System.out.println(a.getId()+",  "+a.getOrderNum());
		
		//当使用到orders中的user属性时,才去加载user对象的信息,可查看控制台日志, 此时才执行查询user表的sql
		System.out.println(a.getUser().getUsername()+",  "+a.getUser().getSex());
		System.out.println(1111);
	}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值