MyBatis配置延迟加载,以及延迟加载无效的问题

延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。需要关联信息时再去按需加载关联信息。这样会大大提高数据库性能。

首先在resultMap标签中的association和collection标签具有延迟加载的功能

第二,在xxxConfig.xml中需要开启延迟加载:

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

这样设置完成后,正常的话,在日志中可以看到延迟加载的效果了。但是我发现当时并没有延迟加载,日志中有多条sql查询语句。后来发现,我的测试代码中,习惯性的加了一句打印语句,这触发了一次延迟加载

@Test
	public void findOrderAndUserLazyLoading() {
		SqlSession sqlSession = sqlSessionFactory.openSession();

		OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class);
		List<OrdersExt> list = mapper.findOrderAndUserLazyLoading();
		// System.out.println(list);

		for (OrdersExt ordersExt : list) {
			System.out.println(ordersExt.getUser());
		}

		sqlSession.close();
	}

将代码中的打印语句去掉即可。


或者可以在配置文件中加入以下语句

<setting name="lazyLoadTriggerMethods" />

lazyLoadTriggerMethods:指定哪个对象的方法触发一次延迟加载。默认值:equals,clone,hashCode,toString

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值