mybatis怎么写一对多
时间: 2023-07-22 13:31:16 浏览: 62
在 MyBatis 中实现一对多的关系有多种方式,其中比较常用的方式是使用嵌套查询和 resultMap。下面是一个示例,假设有两个表:Order(订单)和 OrderItem(订单项),一个订单可以对应多个订单项。
1. 定义实体类
定义 Order 和 OrderItem 两个实体类,其中 Order 类包含一个 List<OrderItem> 属性,表示该订单对应的所有订单项。
2. 编写 OrderMapper.xml
在 OrderMapper.xml 中,使用嵌套查询和 resultMap 来实现一对多的映射关系。具体实现步骤如下:
① 定义 resultMap,将 Order 和 OrderItem 两个实体类映射到数据库中的表结构。
```xml
<resultMap id="orderResultMap" type="Order">
<id column="id" property="id" />
<result column="order_no" property="orderNo" />
<result column="total_price" property="totalPrice" />
<collection property="orderItems" ofType="OrderItem">
<id column="item_id" property="itemId" />
<result column="item_name" property="itemName" />
<result column="item_price" property="itemPrice" />
</collection>
</resultMap>
```
② 编写查询语句,使用嵌套查询和 resultMap 来实现一对多的映射关系。
```xml
<select id="getOrderWithOrderItems" resultMap="orderResultMap">
SELECT o.id, o.order_no, o.total_price, i.item_id, i.item_name, i.item_price
FROM orders o
LEFT JOIN order_items i ON o.id = i.order_id
WHERE o.id = #{orderId}
</select>
```
3. 编写 OrderMapper 接口
在 OrderMapper 接口中定义 getOrderWithOrderItems 方法,用于查询订单和订单项信息。方法参数为订单 id,返回值为 Order 对象。
```java
public interface OrderMapper {
Order getOrderWithOrderItems(Integer orderId);
}
```
这样就实现了一对多的查询。调用 getOrderWithOrderItems 方法时,MyBatis 会执行上述查询语句,并将结果映射到 Order 对象中,其中 Order 的 orderItems 属性包含该订单的所有订单项。
阅读全文