当前位置:   article > 正文

Mybatis多对多中的SQL(查询、删除、更新、插入)及表的设计_mybatis多对多中间表更新

mybatis多对多中间表更新

Mybatis一对多中的SQL(查询、删除、更新、插入)及表的设计
Mybatis一对一中的SQL(查询、删除、更新、插入)及表的设计

1.1现实模型

一个Project需要多个Developer来开发,一个Developer有多个Project开发任务。

1.2实体类

Project

public class Project
{
    private int id;
    private String name;
    private Set<Developer> devs=new HashSet<Developer>();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Developer

public class Developer
{
    private int id;
    private String name;
    private Set<Project> pros=new HashSet<Project>();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.3表的设计

包括三张表:project、developer、midProDev。其中project、developer分别表示两个实体类,midProDev表储存project与developer多对多关系。
重点:midProDev的设计思路:除了id还包含两个字段m_pid,m_did分别外键关联project的p_id和developer的d_id。

project

p_idp_name
14APP开发
15后台开发
16UI美工

developer

d_idd_name
13李明
14王红
15jack

midProDev

idm_pidm_did
71414
81413
91514
101515
111615
121613

解读midProDev表的映射关系:
m_pid=14——>m_did=(13,14):p_id=14的项目(APP开发)对应的开发人员为:d_id=13的李明和d_id=14的王红
m_did=13——>m_pid=(14,16):m_did=13的开发人员(李明)对应项目为:p_id=14的APP开发和p_id=16的UI美工

1.3.1创建表

create table project(p_id int primary key auto_increment,p_name char(20));
create table developer(d_id int primary key auto_increment,d_name char(20));
create table midProDev(id int primary key auto_increment, m_pid int, m_did int);
  • 1
  • 2
  • 3

1.3.2添加外键关联

alter table midProDev add constraint p_d_const foreign key(m_pid) references project(p_id)on delete cascade on update cascade;
alter table midProDev add constraint d_p_const foreign key(m_did) references developer(d_id)on delete cascade on update cascade;
  • 1
  • 2

1.4SQL语句

1.4.1插入

project插入单条:insert into project(p_name) value(?);
developer插入单条:insert into developer(d_name) values(?);
midProDev插入多条:insert into midProDev(m_pid,m_did) values(?,?),(?,?)
  • 1
  • 2
  • 3

一般我们使用Mybatis来出入一个Project对象的数据时,除了要插入Project对象的id,name到project表外,还需要将Project中的Developer集合的数据插入到developer表中。并且还需要同时维护project表和developer表的关系。例如一个Project对象id=1,它的Developer集合有两个id=3和id=4的Developer对象。则midProDev表需要插入语句为:insert into midProDev(m_pid,m_did) values(1,3),(1,4)

1.4.2删除

delete from developer where d_id=?;
  • 1

1.4.3更新

  • 1

1.4.4查询

查询project表中p_id=14的记录所关联的developer表中的数据
select developer.* from midProDev inner join developer on developer.d_id=midProDev.m_did where midProDev.m_pid=14;
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/635338
推荐阅读
相关标签
  

闽ICP备14008679号