MyBatis的collection集合中只能取到一条数据的解决办法

在三表查询时,我的collection集合还能获取到一条数据,找了3小时,最终发现是因为主键名重复(我sql查询语句中第二个表没有写主键,导致我忽略了主键不能重复),还是之前犯过的错误,细微且致命!

一:原代码:

我的Mapper映射如下:
在这里插入图片描述
三表查询select标签如下:

   <select id="selectOrder" resultMap="orderMap">
 		select d_order.*,orderItem.count,orderItem.amount, book.book_name,book.Dangprice,book.product_image  from  d_order  left join order_item orderItem on d_order.id=orderItem.order_id left join d_book book on book.book_id=orderItem.product_id where d_order.user_id=1 order by d_order.ordertime desc
    </select>

二、修改后的代码:

映射不变,只需给主键名字重复起别名即可,修改sql语句如下:

   <select id="selectOrderById" resultMap="orderMap">
        select d_order.*,order_item.id order_item_id,order_item.count count,order_item.amount,d_book.book_name,d_book.Dangprice,d_book.product_image from  d_order left join order_item on d_order.id=order_item.order_id left join d_book on d_book.book_id=order_item.product_id where d_order.id=#{orderId}
    </select>

三、总结

任何细小的过失都要付出沉重的代价!!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis collection 标签用于处理查询语句返回多条记录时,将多条记录封装到一个集合collection 标签只能用于 resultMap 元素。 在 resultMap 元素使用 collection 标签,需要指定以下属性: - property:指定集合类型属性的名称。 - ofType:指定集合类型属性的数据类型。 - resultMap:指定为集合元素的映射关系。 - select:指定查询语句的 id。 下面是 collection 标签的一个示例: ```xml <resultMap id="userMap" type="User"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="password" column="password"/> <collection property="orders" ofType="Order" resultMap="orderMap"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="orderNo" column="order_no"/> <result property="amount" column="amount"/> </collection> </resultMap> <resultMap id="orderMap" type="Order"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="orderNo" column="order_no"/> <result property="amount" column="amount"/> </resultMap> ``` 在上述示例,我们定义了两个 resultMap,一个是 userMap,另一个是 orderMap。userMap 使用了 collection 标签,将订单封装到了 User 对象的 orders 属性。 注意,使用 collection 标签需要指定 ofType 属性,指定集合元素的数据类型。在上述示例,orders 是一个 List<Order> 类型的属性,因此我们指定了 ofType 属性为 Order。 同时,在 collection 标签还可以使用 select 属性,指定查询语句的 id。这个查询语句的返回结果将作为集合的元素。 ```xml <collection property="orders" ofType="Order" select="findOrdersByUserId"/> ``` 在上述示例,我们使用了 select 属性,指定了一个查询语句的 id,这个查询语句的返回结果将作为 orders 集合的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木泽锐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值