在实际项目开发中,多对多关系也是非常常见的关系,比如,一个购物系统中,一个用户可以有多个订单,这是一对多的关系;一个订单中可以购买多种商品,一种商品也可以属于多个不同的订单,订单和商品就是多对多的关系。对于数据库中多对多关系建议使用一个中间表来维护关系,中间表中的订单d作为外键参照订单表的id,商品id作为外键参照商品表的id。
下面我们就用一个简单示例来看看MyBatis怎么处理多对多关系。
首先,在数据库创建三个表:TB_USER、TB_ARTICLE和TB_ORDER,再创建一个中间表维护TB_ARTICLE和TB_ORDER的关系,并插入测试数据。SQL脚本如下:
– 创建用户表
CREATE TABLE tb_user (
id INT PRIMARY KEY AUTO_ INCREMENT,
username VARCHAR(18),
loginname VARCHAR(18),
PASSWORD VARCHAR (18),
phone VARCHAR (18),
address VARCHAF (18)
);
– 插入用户表测试数据
INSERT INTO tb_user (username,loginname,PASSWORD,phone,address)
VALUES(‘张云’,‘jack’,‘123456’,‘13600000000’,‘杭州’);
– 创建商品表
CREATE TABLE tb_article(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR (18),
price DOUBLE,
remark VARCHAR (18)
);
– 插入商品表测试数据
INSERT INTO tb_article(NAME,price,remark)
VALUIES(‘精通Python自然语言处理’,108.9,‘经典著作’);
INSERT INTO tb_article(NAME,price,remark)
VALUES(‘自然语言处理原理与实践’,99.9,‘经典著作’);
INSERT INTO tb_article(MAME,price,remark)
VALUES(‘大数据架构详解’,89.9,'经典著作’);
INSBRT INTO tb_article(NAE,price,remark)
VAIUES(‘推荐系统实践’,69.9,‘经典著作’);
– 创建订单表
CREATE TABLE tb_order(
id INT PRIMARY KEY AUTO_INCREMENT,
CODE VARCHAR(32),
total DOUBLE,
user_id INT,
FOREIGN KEY (user_id) REFBRENCES tb_user(id)
– 插入订单表测试数据
INSERT INTO tb_order (CODE,total,user_id)
VALUES('20180315ORDER1212,388.6,1);
INSERT INTO tb_ordor(CODE,total,user id)
VALUES('20180315ORDER1213,217.8,1);
– 创建中间表
CREATB TABLE tb_item(
order_id INT,
article_id INT,
amount INT,
PRIMARY KEY (order_id,article_id),
FOREIGN KEY (order_id) REPERENCES tb_order(id),
FOREIGN KEY (acticle_id) REERENCES tb_article(id)
);
– 创建插入中间表数据
INSERT INTO tb_item(order_id,article_id,amount)
VALUES (1,1,1);
INSERT INTO tb_item(order_id,article_id,amount)
VALUES (1,2,1);
INSERT INTO tb_item(orde_id, article_id,amount)
VALUES (1,3,2);
INSERT INTO tb_item(orde_id, article_id,amount)
VALUES (2,4,2);
INSERT INTO tb_item(orde_id, article_id,amount)
VA