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

来源:互联网 发布:python编写抢购软件 编辑:程序博客网 时间:2024/06/09 20:58

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>();}

Developer

public class Developer{    private int id;    private String name;    private Set<Project> pros=new HashSet<Project>();}

1.3表的设计

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

project

p_id p_name 14 APP开发 15 后台开发 16 UI美工

developer

d_id d_name 13 李明 14 王红 15 jack

midProDev

id m_pid m_did 7 14 14 8 14 13 9 15 14 10 15 15 11 16 15 12 16 13

解读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.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.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(?,?),(?,?)

一般我们使用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.4.3更新

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;
0 0
原创粉丝点击