mybatis 一对多查询,代码示例
时间: 2023-11-09 10:00:15 浏览: 86
假设有两个表,一个是订单表(order),一个是订单详情表(order_item),一个订单可以对应多个订单详情,可以用 MyBatis 的一对多查询来实现。
首先需要创建两个实体类 Order 和 OrderItem,分别对应数据库的两个表。
Order 实体类:
```java
public class Order {
private Integer id;
private String orderNo;
private Date createTime;
private List<OrderItem> orderItems;
// getter,setter 略
}
```
OrderItem 实体类:
```java
public class OrderItem {
private Integer id;
private Integer orderId;
private String productName;
private Integer productCount;
// getter,setter 略
}
```
然后在 OrderMapper.xml 中定义一对多查询的 SQL 语句:
```xml
<select id="getOrderWithItems" resultMap="orderWithItems">
SELECT o.id, o.order_no, o.create_time,
i.id AS item_id, i.order_id, i.product_name, i.product_count
FROM `order` o
LEFT JOIN order_item i ON o.id = i.order_id
WHERE o.id = #{id}
</select>
<resultMap id="orderWithItems" type="Order">
<id property="id" column="id" />
<result property="orderNo" column="order_no" />
<result property="createTime" column="create_time" />
<collection property="orderItems" ofType="OrderItem" resultMap="orderItemResult" />
</resultMap>
<resultMap id="orderItemResult" type="OrderItem">
<id property="id" column="item_id" />
<result property="orderId" column="order_id" />
<result property="productName" column="product_name" />
<result property="productCount" column="product_count" />
</resultMap>
```
在上面的 SQL 语句中,使用了左连接来查询订单以及对应的订单详情,其中 o 表示订单表,i 表示订单详情表。通过在 Order 实体类中添加一个 List 类型的属性 orderItems,来保存一对多查询的结果。
最后,在 OrderMapper 接口中定义 getOrderWithItems 方法:
```java
public interface OrderMapper {
Order getOrderWithItems(Integer id);
}
```
通过调用 getOrderWithItems 方法,就能够得到一个订单以及它对应的多个订单详情的信息。
阅读全文