Mybatis多表映射之一对多映射

上文总结了一对一关联关系中的映射方法。那么,如果存在一对多关系,又该定义映射关系呢?

1. 需求说明

假设目前存在顾客表与订单表,一个顾客与多个订单对应。因此,在顾客实体类中,应该有一个订单类型的list列表。如下所示:

public class Customer {

  private Integer customerId;
  private String customerName;
  private List<Order> orderList;// 体现的是对多的关系
}

public class Order {

  private Integer orderId;
  private String orderName;
}

2. CustomerMapper接口

定义一个方法接口,根据顾客id查询顾客信息及对应的订单信息。

public interface CustomerMapper {

  Customer selectCustomerWithOrderList(Integer customerId);

}

3. CustomerMapper.xml文件

<!-- 配置resultMap实现从Customer到OrderList的“对多”关联关系 -->
<resultMap id="selectCustomerWithOrderListResultMap" type="customer">

  <!-- 映射Customer本身的属性 -->
  <id column="customer_id" property="customerId"/>

  <result column="customer_name" property="customerName"/>

  <!-- collection标签:映射“对多”的关联关系 -->
  <!-- property属性:在Customer类中,关联“多”的一端的属性名 -->
  <!-- ofType属性:集合属性中元素的类型 -->
  <collection property="orderList" ofType="order">

    <!-- 映射Order的属性 -->
    <id column="order_id" property="orderId"/>

    <result column="order_name" property="orderName"/>

  </collection>

</resultMap>

<!-- Customer selectCustomerWithOrderList(Integer customerId); -->
<select id="selectCustomerWithOrderList" resultMap="selectCustomerWithOrderListResultMap">
  SELECT c.customer_id,c.customer_name,o.order_id,o.order_name
  FROM t_customer c
  LEFT JOIN t_order o
  ON c.customer_id=o.customer_id
  WHERE c.customer_id=#{customerId}
</select>

总结:

  • 一对多映射时,在resultMap中使用标签collection
  • 与一对一映射中association一样,property属性值为被关联的实体类属性名相同。在上述例子中,顾客类中订单类型的集合属性名为orderList。
  • ofType与association中的javaType一样,属性值为被关联的实体类的全类名。这里是list列表,因此填列表的泛型类型,也就是订单类。

相关推荐

  1. Mybatis映射之一映射

    2024-03-14 08:28:07       48 阅读
  2. MyBatis笔记——一映射问题解决

    2024-03-14 08:28:07       34 阅读
  3. MyBatis 自定义映射 ResultMap:一映射关系处理

    2024-03-14 08:28:07       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 08:28:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 08:28:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 08:28:07       82 阅读
  4. Python语言-面向对象

    2024-03-14 08:28:07       91 阅读

热门阅读

  1. Mybatis-plus手写SQL如何使用条件构造器和分页

    2024-03-14 08:28:07       42 阅读
  2. Python之函数进阶-柯里化

    2024-03-14 08:28:07       37 阅读
  3. 蓝桥杯2023年-砍树(dfs,树上差分)

    2024-03-14 08:28:07       35 阅读
  4. [Django 0-1] Core.Checks 模块

    2024-03-14 08:28:07       41 阅读
  5. 海康抓图保存路径失败NET_DVR_CaptureJPEGPicture

    2024-03-14 08:28:07       59 阅读
  6. js使用canvas实现图片鼠标滚轮放大缩小拖拽预览

    2024-03-14 08:28:07       47 阅读
  7. libigl 网格面片随机赋色

    2024-03-14 08:28:07       46 阅读
  8. 模型的参数量、计算量、延时等的关系

    2024-03-14 08:28:07       38 阅读
  9. C语言(指针)单元练习二

    2024-03-14 08:28:07       33 阅读