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

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

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

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


		
		
		
		
		
	

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

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

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

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

		sqlSession.close();
	}

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


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

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

你可能感兴趣的:(Mybatis)