用mybatis collection标签写一个示例
时间: 2024-05-09 18:16:26 浏览: 67
假设有两个实体类`Order`和`Item`,一个订单可以包含多个商品条目,我们可以使用MyBatis的collection标签来实现一对多的关系映射。以下是一个示例:
Order实体类:
```java
public class Order {
private int id;
private String orderNo;
private List<Item> itemList; // 一个订单包含多个商品条目
// 省略getter和setter方法
}
```
Item实体类:
```java
public class Item {
private int id;
private String name;
private int price;
private int orderId; // 商品条目对应的订单ID
// 省略getter和setter方法
}
```
对应的Mapper.xml文件:
```xml
<!-- 查询订单及其包含的商品条目 -->
<select id="selectOrderWithItems" resultMap="orderResultMap">
SELECT o.id, o.order_no, i.id AS item_id, i.name, i.price, i.order_id
FROM orders o
LEFT JOIN items i ON o.id = i.order_id
WHERE o.id = #{id}
</select>
<!-- 定义Order和Item的resultMap -->
<resultMap id="orderResultMap" type="Order">
<id property="id" column="id"/>
<result property="orderNo" column="order_no"/>
<collection property="itemList" ofType="Item">
<id property="id" column="item_id"/>
<result property="name" column="name"/>
<result property="price" column="price"/>
</collection>
</resultMap>
```
在上面的示例中,我们使用`LEFT JOIN`关联查询`orders`和`items`表,并使用`collection`标签将查询结果映射到`Order`实体类中的`itemList`属性中,同时将`id`、`name`、`price`等字段映射到`Item`实体类中。最终查询结果会返回一个`Order`对象,其中`itemList`属性包含了该订单对应的所有商品条目。
阅读全文