Mybatis中的关系映射

1.一对一的映射关系

一对一关系(One-to-One)表示两个实体对象之间存在唯一的关联关系。例如,一个学生只能拥有一个身份证。在 MyBatis 中,我们可以使用结果嵌套或一对一映射来处理一对一关系。

1.1 创建模型类和Vo类

package com.YU.model;

public class OrderItem {
    private Integer orderItemId;

    private Integer productId;

    private Integer quantity;

    private Integer oid;

    public OrderItem(Integer orderItemId, Integer productId, Integer quantity, Integer oid) {
        this.orderItemId = orderItemId;
        this.productId = productId;
        this.quantity = quantity;
        this.oid = oid;
    }

    public OrderItem() {
        super();
    }

    public Integer getOrderItemId() {
        return orderItemId;
    }

    public void setOrderItemId(Integer orderItemId) {
        this.orderItemId = orderItemId;
    }

    public Integer getProductId() {
        return productId;
    }

    public void setProductId(Integer productId) {
        this.productId = productId;
    }

    public Integer getQuantity() {
        return quantity;
    }

    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    public Integer getOid() {
        return oid;
    }

    public void setOid(Integer oid) {
        this.oid = oid;
    }
}
package com.YU.vo;

import com.YU.model.Order;
import com.YU.model.OrderItem;

/**
 * @author YU
 * @create 2023-09-04 9:31
 */
public class OrderItemVo extends OrderItem {
    private Order order;

    public Order getOrder() {
        return order;
    }

    public void setOrder(Order order) {
        this.order = order;
    }
}

 

 1.2 配置当前模型类的mapper.xml


    
    
    
    
    
      
      
    
  

  

1.3 开始测试

省略了业务逻辑层的编写,这里使用junit直接进行测试

package com.YU.biz.Impl;

import com.YU.biz.OrderItemBiz;
import com.YU.vo.OrderItemVo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * @author YU
 * @create 2023-09-04 9:49
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-context.xml"}
)
public class OrderTest {

    @Autowired
    private OrderItemBiz orderItemBiz;

    @Test
    public void selectOrderItemId(){
        OrderItemVo orderItemVo = orderItemBiz.selectByOrderItemId(27);
        System.out.println(orderItemVo);
        System.out.println(orderItemVo.getOrder());
    }
}

2.一对多的映射关系

一对多关系(One-to-Many)表示一个实体对象(一的一方)可以与多个相关实体对象(多的一方)建立关联。例如,一个部门可以有多个员工。在 MyBatis 中,我们可以使用嵌套查询或结果映射来处理一对多关系。

2.1 创建模型类和Vo类

package com.YU.model;

import lombok.ToString;

@ToString
public class Order {
    private Integer orderId;

    private String orderNo;

    public Order(Integer orderId, String orderNo) {
        this.orderId = orderId;
        this.orderNo = orderNo;
    }

    public Order() {
        super();
    }

    public Integer getOrderId() {
        return orderId;
    }

    public void setOrderId(Integer orderId) {
        this.orderId = orderId;
    }

    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }
}
package com.YU.vo;

import com.YU.model.Order;
import com.YU.model.OrderItem;

import java.util.ArrayList;
import java.util.List;

/**
 * @author YU
 * @create 2023-09-04 9:31
 */
public class OrderVo extends Order {
    private List OrderItems = new ArrayList<>();

    public List getOrderItem() {
        return OrderItems;
    }

    public void setOrderItem(List OrderItems) {
        this.OrderItems = OrderItems;
    }
}

2.2 配置当前模型类的mapper.xml


    
    
    
      
      
      
      
    
  

  

2.3 开始测试

@Autowired
    private OrderBiz orderBiz;

    @Test
    public void selectByOid(){
        OrderVo orderVo = orderBiz.selectByOid(7);
        System.out.println(orderVo);
        orderVo.getOrderItem().forEach(System.out::println);
    }

3.多对多的映射关系

多对多的映射关系是指两个实体之间存在多对多的关系,其中一个实体可以关联多个另一个实体,而另一个实体也可以关联多个第一个实体。

在关系型数据库中,多对多的关系需要通过中间表(也称为连接表)来实现。中间表包含两个外键关联到两个实体的主键,用于记录它们之间的关系。

总结

在 MyBatis 中,映射关系是指数据库表和 Java 对象之间的映射配置,用于将查询结果映射到 Java 对象或将 Java 对象的属性映射到数据库表的列

基于 XML 的映射方式:

  • 使用  元素配置结果集的映射关系,指定数据库列和 Java 对象属性之间的映射。
  • 可以使用  元素将数据库列映射到 Java 对象的属性,并指定属性的类型、映射关系及相关配置。
  • 可以使用  元素配置关联对象的映射关系,用于映射复杂对象之间的关系。
  • 可以使用  元素配置集合类型对象的映射关系,用于映射一对多或多对多的关系。
  • 使用  元素定义可重用的 SQL 片段,提供了组织和共享 SQL 语句的能力。

 注意点: 

  • 确保数据库表和 Java 对象的属性名称、类型一致,以便正确地映射数据。
  • 配置正确的映射关系,确保查询结果能正确映射到 Java 对象,或对象的属性能正确映射到数据库表。
  • 对于复杂的关联关系,需要配置适当的映射关系,以便处理关联对象之间的关系。

正确配置映射关系可以提高数据的访问效率和开发效率,使数据库表和 Java 对象之间的转换更加方便和灵活。

你可能感兴趣的:(mybatis)