Mybatis高级应用 延迟加载

通过前面的内容,可以知道通过resultMap元素可以实现mybatis的高级映射输出,association可以实现一对一高级映射,collection可以实现一对多高级映射,而association和collection还具有延迟加载的功能。

所谓的延迟加载就是先查询主表信息,主表信息查询完毕后,再按照主表相关数据完成关联表信息的查询,这就是延迟加载。即:在SQL查询中,先查询一部分(主表信息),再查询另一部分(关联表信息)。

比如前面操作的查询用户订单数据,并关联查询用户的数据信息,先查询主表用户订单的信息,查询完成后,再按照主表的数据,按需要去查询关联表中的数据。如下图情景:用户点击黑色三角按钮,再将对应的订单明细查出展示;

Mybatis高级应用 延迟加载_第1张图片

 >入门程序:

需求:订单表关联查询用户表

在实现查询订单表并关联查询用户表的SQL查询中,SQL语句书写形式如下:

对上面的SQL语句进行拆分,按照延迟加载的本质,即先查询主表,再查询关联表,拆分如下:

1.select * from orders

2.select * from user where user_id=?

 步骤:

(1)开启懒加载


	
		
		
	

(2)Mapper配置

    
    
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
		
		
	
	

(3)Mapper接口

public interface UserMapper {

	public OrderBean queryOrderLazyLoadingUser(Integer orderId) throws Exception;
}

(4)测试类

@Test
	public void queryOrderLazyLoadingUser() throws Exception{	
		Integer orderId=1111;
		UserMapper mapper=session.getMapper(UserMapper.class);
		OrderBean orderBean = mapper.queryOrderLazyLoadingUser(orderId);
		System.out.println(orderBean.getOrderDate());
		//System.out.println(orderBean.getUser());
		session.close();
	}

当将注释放开,查看User属性,才会执行延迟的Sql:

DEBUG [main] - ==>  Preparing: select* from orders where order_id=? 
DEBUG [main] - ==> Parameters: 1111(Integer)
DEBUG [main] - <==      Total: 1
1996-12-12
DEBUG [main] - ==>  Preparing: select * from user where user_id=? 
DEBUG [main] - ==> Parameters: 2(Integer)
DEBUG [main] - <==      Total: 1
User [userId=2, userName=lisi, password=123789, roleCode=admin, cname=weiwei, telphone=17864195335, address=山东济南, isLogin=0]

 

你可能感兴趣的:(SSM)