mybatis xml resultMap集合条件查询
时间: 2024-02-20 15:34:59 浏览: 82
在 MyBatis 的 XML 配置文件中,可以使用 `resultMap` 元素定义结果集的映射规则,其中可以使用 `collection` 元素来映射一个集合类型的属性。下面是一个简单的例子:
首先,定义一个 `Order` 类,其中包含一个 `List<OrderItem>` 类型的属性:
```java
public class Order {
private Integer id;
private List<OrderItem> items;
// getters and setters
}
public class OrderItem {
private Integer id;
private Integer orderId;
private Integer productId;
private Integer quantity;
// getters and setters
}
```
然后,在 MyBatis 的 XML 配置文件中,定义一个 `resultMap` 元素,其中使用 `collection` 元素映射 `items` 属性:
```xml
<resultMap id="orderResultMap" type="Order">
<id property="id" column="order_id"/>
<collection property="items" ofType="OrderItem">
<id property="id" column="item_id"/>
<result property="orderId" column="order_id"/>
<result property="productId" column="product_id"/>
<result property="quantity" column="quantity"/>
</collection>
</resultMap>
```
在上面的例子中,`resultMap` 元素的 `id` 属性指定了结果集映射规则的唯一标识符,`type` 属性指定了映射的 Java 类型。`collection` 元素的 `property` 属性指定了集合属性的名称,`ofType` 属性指定了集合元素的 Java 类型,内部的 `id` 和 `result` 元素则分别映射集合元素的 ID 属性和其他属性。
最后,在 SQL 映射文件中,可以使用 `resultMap` 元素引用上面定义的结果集映射规则,并在 SQL 语句中使用 `JOIN` 操作查询两个表的数据:
```xml
<select id="getOrderById" resultMap="orderResultMap">
SELECT o.id AS order_id, i.id AS item_id, i.order_id, i.product_id, i.quantity
FROM orders o
JOIN order_items i ON o.id = i.order_id
WHERE o.id = #{id}
</select>
```
在上面的例子中,`resultMap` 属性指定了使用哪个结果集映射规则,`JOIN` 操作查询了两个表的数据,并将结果映射到 `Order` 对象中,包括其中的集合属性 `items`。查询结果中,每个订单会对应多个订单项,所有的订单项会被封装到 `List<OrderItem>` 中。
阅读全文