Mybatis 快速入门之 关联关系映射

这篇博客详细介绍了Mybatis中一对一、一对多、多对一和多对多关联关系的实现步骤,包括在实体类中定义关系、配置mapper映射文件、使用mybatis-generator生成相关代码以及进行单元测试。通过具体的案例展示了如何处理不同类型的关联关系。
摘要由CSDN通过智能技术生成

目录

一:基本概念

二:关联关系的分类

一对一,一对多,多对一,多对多

关系的撰述:

一对多:一本书对应多种书本类型,例如:西游记 -> 神话、古典、名著

多对一:多本书指向一种书本类型,例如:西游记、山海经、聊斋志异 -> 神话  

多对多:永远视为两个一对多

一个人负责多个项目开发,例如:张三负责 A B C

一个项目由多个人来开发,例如:A项目由张三、李四、王五来开发

三:实现关联关系的操作步骤

案例一:实现一对多关系

       一对多:一个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a, 在多的一方,添加一的一方的主键作为外键

1.将数据表导入数据库中

2.通过mybatis-generator插件生成dao、mapper、model层

重点:

客户实体类----Customer:

CustomerMapper:

3..配置mybatis关联映射文件------CustomerMapper.xml

属性解析:

servicej接口类与实现类:

4.junit4单元测试

案例二:实现多对一关系

建立实体层面的关联关系: 多对一:多个订单对应一个客户(一个订单对应唯一一个客户)

订单实体类----order

1.orderMapper层

2.配置mybatis关联映射文件------OrderMapper.xml

 在元素中,包含了一个子元素,MyBatis通过该元素来处理一对多关联关系。

在元素中,包含了一个子元素,MyBatis就是通过该元素来处理一对一关联关系。

3.servicej接口类与实现类:

4.junit4单元测试

案例三:实现多对多关系

2.通过mybatis-generator插件生成dao、mapper、model层

NewsCategoryMapper:

3.配置mybatis关联映射文件

4.servicej接口类与实现类:

5.junit4单元测试


一:基本概念

        关联关系是指类之间的引用关系,如果类A与类B关联,那么类A将被定义成类B的属性。

以下例子可以表现类之间的引用关系:

  Adress类:

public class Address{
   private String name;
}

B类:

public class B{
   private String sid;
   private Float score;
   private Address address;   
}

       adress这个类被定义成类B的属性,可以通过B类来调用adress类的相关属性,它们之间存在着引用关系

二:关联关系的分类

  • 一对一,一对多,多对一,多对多

关系的撰述:

  • 一对多:一本书对应多种书本类型,例如:西游记 -> 神话、古典、名著

  • 多对一:多本书指向一种书本类型,例如:西游记、山海经、聊斋志异 -> 神话  

  • 多对多:永远视为两个一对多

  • 一个人负责多个项目开发,例如:张三负责 A B C

  • 一个项目由多个人来开发,例如:A项目由张三、李四、王五来开发

三:实现关联关系的操作步骤

  • 案例一:实现一对多关系

       一对多:一个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a, 在多的一方,添加一的一方的主键作为外键

1.将数据表导入数据库中

-- 一对多
-- 客户表(主表)
create table t_customer
(
  customer_id int primary key not null auto_increment,
  customer_name varchar(50) not null
);

-- 多对一
-- 订单表(从表)
create table t_order
(
  order_id int primary key not null auto_increment,
  order_no varchar(50) not null unique,
  cid int not null,
  foreign key(cid) references t_customer(customer_id)
);


-- 初始化代码
delete from t_order;
delete from t_customer;

-- 与mssql不一样,自动增长是可以赋值,也可以不赋值
insert into t_customer(customer_id,customer_name) values(1, 'zs');
insert into t_customer(customer_id,customer_name) values(2, 'ls');
insert into t_customer(customer_id,customer_name) values(3, 'ww');
insert into t_customer(customer_id,customer_name) values(4, 'xm');

insert into t_order(order_no,cid) values('P01',1);
insert into t_order(order_no,cid) values('P02',1);
insert into t_order(order_no,cid) values('P03',1);
insert into t_order(order_no,cid) values('P04',1);
insert into t_order(order_no,cid) values('P05',1);
insert into t_order(order_no,cid) values('P06',2);
insert into t_order(order_no,cid) values('P07',2);
insert into t_order(order_no,cid) values('P08',2);
insert into t_order(order_no,cid) values('P09',3);
insert into t_order(order_no,cid) values('P10',3);



SELECT * FROM t_customer;
SELECT * FROM t_order;

2.通过mybatis-generator插件生成dao、mapper、model层

如果有兴趣了解插件的配置,可以参考之前的博客:

nullMVC全名是ModelViewCotroller,是模型(model)——视图(view)——控制器(controller)的缩写,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码自定义MVCSSMaction(中转站-----servlet类)controller(控制层)biz(业务逻辑处理层)servicedao(数据访问层)mapperIXxxDAO.java(接口)XxxMapper.java(接口)XxxDAOImpl.java(实现类)......https://blog.csdn.net/qq_61313896/article/details/125969558

重点:

  • 建立实体层面的关联关系:

        一对多:一个客户(customer)对应多个订单(order)

如果要建立一对多的关系,则要在客户实体类建立关系:
  private List<Order> orders=new ArrayList<>();

客户实体类----Customer:

package com.tangyuan.model;

import lombok.ToString;

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

/**
 * 建立实体层面的关联关系:
 * 一对多:一个客户(customer)对应多个订单(order)
 */

public class Customer {
    private Integer customerId;

    private String customerName;

    //A:订单(Order) B:客户(Customer)
    //一对多
    private List<Order> orders=new ArrayList<>();


    public Customer(Integer customerId, String customerName) {
        this.customerId = customerId;
        this.customerName = customerName;
    }

    public List<Order> getOrders() {
        return orders;
    }

    public void setOrders(List<Order> orders) {
        this.orders = orders;
    }

    public Customer() {
        super();
    }

    public Integer getCustomerId() {
        return customerId;
    }

    public void setCustomerId(Integer customerId) {
        this.customerId = customerId;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "customerId=" + customerId +
                ", customerName='" + customerName + '\'' +
                ", orders=" + orders +
                '}';
    }
}

CustomerMapper:

package com.tangyuan.mapper;

import com.tangyuan.model.Customer;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface CustomerMapper {

    /**
     * 查询所有
     * @return
     */
    List<Customer> queryCustomer();


}

3..配置mybatis关联映射文件------CustomerMapper.xml

 <resultMap id="one2many" type="Customer">
        <id column="customer_id" property="customerId"/>
        <result column="customer_name" property="customerName"/>
        <!-- 一对多的关系 -->
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值