Mybatis步步进阶(七)——Mybatis实体关联映射

一、一对一  

1、resultType返回类型:使用resultType返回相对简单,查询扩展类属性时,创建扩展类。

2、resultMap返回类型:使用resultMap首先需要将1:1关联实体例如订单关联查询用户是一对一关系,所以在Order实体中添加单个User对象存储关联查询的用户信息。

1)Order Pojo中添加private User user;

2)定义resultMap

需要关联查询映射的是用户信息,使用association将用户信息映射到订单对象的用户属性中。



	
	
	
	
	
		
		
		
		
	
a ssociation 表示进行关联查询单条记录

property表示关联查询的结果存储在cn.itcast.mybatis.po.Orders的user属性中

javaType表示关联查询的结果类型

<id property="id" column="user_id"/>查询结果的user_id列对应关联对象的id属性,这里是表示user_id是关联查询对象的唯一标识。

<result property="username" column="username"/>查询结果的username列对应关联对象的username属性。

3)Mapper映射

4)mapper.java接口

public List findOrdersListResultMap() throws Exception;
5)测试

Public void testfindOrdersListResultMap()throws Exception{
		//获取session
		SqlSession session = sqlSessionFactory.openSession();
		//获限mapper接口实例
		UserMapper userMapper = session.getMapper(UserMapper.class);
		//查询订单信息
		List list = userMapper.findOrdersList2();
		System.out.println(list);
		//关闭session
		session.close();
	}
二、一对多 
例如根据订单查询订单详情关联信息order 与OrderDetail类

1、Order 实体中添加OrderDetail的List实体集

     在Orders类中加入List orderdetails属性

2、定义ResultMap 



	
	
	
	
		
		
		
	
	
		
		
		
	
resultMap继承

如果应用到User的实体关联查询,上边一对一查询订单及用户信息定义的resultMap相同,可以省去association关联,将用户中定义的resultMap直接套用继承,优化如下:


	
		
		
		
	

//使用extends="userordermap" 继承userodermap

3、Mapper映射

     总结: 使用 collection 完成一对多关联查询,将关联查询信息映射到集合对象。
三、多对多

     在Mybaits中,一对多查询是多对多查询的特例,1:n中使用一个collectin元素完成关联映射,而n:n中使用collection嵌套,表示多条记录映射到多条查询。例如用户关联订单、订单详情、商品信息

1、pojo扩展

     在User中添加List orders 属性,在Orders类中加入List orderdetails属性

2、定义ResultMap 

	 
	 	
		
	 	
	           
	           
	     	     
	     	 	
	      		
	     		
	      		
	      		
		  			 
		   			 
		   			 
			
	   	     
	        
	 
     在订单collection中添加订单详情collection表示订单与订单详情的多对多关系。 
  

你可能感兴趣的:(Mybatis)