Mybatis多表映射之一对一映射

本文介绍了在Spring框架下,如何通过OrderMapper接口和XML配置文件处理订单表与顾客表的一对一映射,重点讲解了resultMap中association标签的使用方法。
摘要由CSDN通过智能技术生成

上文总结了在单表中将数据库字段与实体类属性映射的方法。但是在实际场景中,我们常常遇到多表映射,也就是说实体类中有另外一个实体类的属性,这种情况我们如何处理呢?

1. 需求说明

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

public class Customer {

  private Integer customerId;
  private String customerName;

}

public class Order {

  private Integer orderId;
  private String orderName;
  private Customer customer;
  
}

2. OrderMapper接口

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

public interface OrderMapper {
  Order selectOrderWithCustomer(Integer orderId);
}

3. OrderMapper.xml配置文件

<!-- 创建resultMap实现“对一”关联关系映射 -->
<!-- id属性:通常设置为这个resultMap所服务的那条SQL语句的id加上“ResultMap” -->
<!-- type属性:要设置为这个resultMap所服务的那条SQL语句最终要返回的类型 -->
<resultMap id="selectOrderWithCustomerResultMap" type="order">

  <!-- 先设置Order自身属性和字段的对应关系 -->
  <id column="order_id" property="orderId"/>

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

  <!-- 使用association标签配置“对一”关联关系 -->
  <!-- property属性:在Order类中对一的一端进行引用时使用的属性名 -->
  <!-- javaType属性:一的一端类的全类名 -->
  <association property="customer" javaType="customer">

    <!-- 配置Customer类的属性和字段名之间的对应关系 -->
    <id column="customer_id" property="customerId"/>
    <result column="customer_name" property="customerName"/>

  </association>

</resultMap>

<!-- Order selectOrderWithCustomer(Integer orderId); -->
<select id="selectOrderWithCustomer" resultMap="selectOrderWithCustomerResultMap">

  SELECT order_id,order_name,c.customer_id,customer_name
  FROM t_order o
  LEFT JOIN t_customer c
  ON o.customer_id=c.customer_id
  WHERE o.order_id=#{orderId}

</select>

总结:

  • 一对一映射时,在resultMap中使用标签association
  • resultMap中的 property属性值要与被关联的实体类属性名相同,例如上述例子中的customer
  • resultMap中的javaType属性值为被关联的实体类的全类名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值