Mybatis-高级映射-一对多

现在多出一张表orderdetail
在这里插入图片描述
从三张表user,orders,orderdetail中查询记录

SELECT 
	orders.*,
	`user`.username,
	`user`.sex,
	`user`.address,
	orderdetail.id  orderdetail_id,
	orderdetail.items_num,
	orderdetail.orders_id
FROM
	orders,
	`user`,
	orderdetail
WHERE orders.user_id = `user`.id AND orderdetail.orders_id = orders.id

由于orders和orderdetail是一对多的关系,所以在结果中orders是有重复的.
在这里插入图片描述

现在我们要使得重复的oders合为一条,而orderdetail的信息整合为一个list列表.

在orders.java中新增一个属性
List orderdetails;

对多条orderdetail进行映射

<!-- 查询订单关联查询用户及订单明细
		继承OrderUserResultMap
	 -->
	<resultMap type="mybatis.com.entity.Orders" id="findOrdersAndOrderdetailResultMap" extends="OrderUserResultMap"> 
		<!-- 订单明细信息
			一个订单关联多条明细,要使用collection进行映射
			collection:对关联查询到多条记录映射到mybatis.com.entity.Orders哪个属性
			ofType指定映射list集合属性中的类型
		 -->
		<collection property="orderdetails" ofType="mybatis.com.entity.Orderdetail">
			<id column="orderdetail_id" property="id"/>
			<result column="items_num" property="items_num"/>
			<result column="items_id" property="items_id"/>
			<result column="orders_id" property="orders_id"/>
		</collection>
	</resultMap>

	<!-- 一对多 -->
	<select id="findOrdersAndOrderdetailResult" resultMap="findOrdersAndOrderdetailResultMap">
	SELECT 
		orders.*,
		`user`.username,
		`user`.sex,
		`user`.address,
		orderdetail.id  orderdetail_id,
		orderdetail.items_num,
		orderdetail.orders_id
	FROM
		orders,
		`user`,
		orderdetail
	WHERE orders.user_id = `user`.id AND orderdetail.orders_id = orders.id
	</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值