Mybatis实体关联映射

原文源自:https://blog.csdn.net/Daybreak1209/article/details/51815753

一、一对一  

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

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

1)Order Pojo中添加private User user;

2)定义resultMap

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

<!-- 订单信息resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userordermap">
	<!-- 这里的id,是mybatis在进行一对一查询时将user字段映射为user对象时要使用,必须写 -->
	<id property="id" column="id"/>
	<result property="user_id" column="user_id"/>
	<result property="number" column="number"/>
	<association property="user" javaType="cn.itcast.mybatis.po.User">
		<!-- 这里的id为user的id,如果写上表示给user的id属性赋值 -->
		<id property="id" column="user_id"/>
		<result property="username" column="username"/>
		<result property="address" column="address"/>
	</association>
</resultMap>

association:表示进行关联查询单条记录
property:表示关联查询的结果存储在cn.itcast.mybatis.po.Orders的user属性中

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

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

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

3)Mapper映射

<select id="findOrdersListResultMap" resultMap="userordermap">
	SELECT
	orders.*,
	user.username,
	user.address
	FROM
	orders,	user
	WHERE orders.user_id = user.id 
</select>

4)mapper.java接口

public List<Orders> findOrdersListResultMap() throws Exception;

5)测试

Public void testfindOrdersListResultMap()throws Exception{
		//获取session
		SqlSession session = sqlSessionFactory.openSession();
		//获限mapper接口实例
		UserMapper userMapper = session.getMapper(UserMapper.class);
		//查询订单信息
		List<Orders> list = userMapper.findOrdersList2();
		System.out.println(list);
		//关闭session
		session.close();
	}

二、一对多 
例如根据订单查询订单详情关联信息order 与OrderDetail类

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

     在Orders类中加入List<Orderdetail> orderdetails属性

2、定义ResultMap 

<!-- 订单信息resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap">
	<id property="id"column="id"/>
	<result property="user_id" column="user_id"/>
	<result property="number" column="number"/>
	<association property="user" javaType="cn.itcast.mybatis.po.User">
		<id property="id" column="user_id"/>
		<result property="username" column="username"/>
		<result property="address" column="address"/>
	</association>
	<collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
		<id property="id" column="orderdetail_id"/>
		<result property="items_id" column="items_id"/>
		<result property="items_num" column="items_num"/>
	</collection>
</resultMap>

resultMap的继承:

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

<resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap" extends="userordermap">
	<collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
		<id property="id" column="orderdetail_id"/>
		<result property="items_id" column="items_id"/>
		<result property="items_num" column="items_num"/>
	</collection>
</resultMap>
//使用extends="userordermap" 继承userodermap

3、Mapper映射

<select id="findOrdersDetailList" resultMap="userorderdetailmap">
	SELECT
	orders.*,
	user.username,
	user.address,
	orderdetail.id orderdetail_id,
	orderdetail.items_id,
	orderdetail.items_num
	FROM orders,user,orderdetail
	WHERE orders.user_id = user.id
	AND orders.id = orderdetail.orders_id
</select>

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

1、pojo扩展
     在User中添加List<Orders> orders 属性,在Orders类中加入List<Orderdetail> orderdetails属性

2、定义ResultMap 
 

<resultMap type="cn.itcast.mybatis.po.User" id="userOrderListResultMap">
	 	<id column="user_id" property="id"/>
		<result column="username" property="username"/>
	 	<collection property="orders" ofType="cn.itcast.mybatis.po.Orders">
	           <id  column="id" property="id"/>
	           <result property="number" column="number"/>
	     	     <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
	     	 	<id  column="orderdetail_id" property="id"/>
	      		<result property="ordersId" column="id"/>
	     		<result property="itemsId" column="items_id"/>
	      		<result property="itemsNum" column="items_num"/>
	      		<association property="items" javaType="cn.itcast.mybatis.po.Items">
		  			 <id column="items_id" property="id"/>
		   			 <result column="items_name" property="name"/>
		   			 <result column="items_detail" property="detail"/>
			</association>
	   	     </collection>
	        </collection>
	 </resultMap>

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

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值