0.前期准备
数据库:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48CREATE TABLE tb_article
(
id INT AUTO_INCREMENT
PRIMARY KEY,
name VARCHAR(18) NULL,
price DOUBLE NULL,
remark VARCHAR(18) NULL,
CONSTRAINT tb_article_id_uindex
UNIQUE (id)
)
CREATE TABLE tb_consumer
(
id INT AUTO_INCREMENT
PRIMARY KEY,
username VARCHAR(18) NULL,
loginname VARCHAR(18) NULL,
password VARCHAR(18) NULL,
phone VARCHAR(18) NULL,
address VARCHAR(18) NULL,
CONSTRAINT tb_consumer_id_uindex
UNIQUE (id)
)
CREATE TABLE tb_order
(
id INT AUTO_INCREMENT
PRIMARY KEY,
code VARCHAR(32) NULL,
total DOUBLE NULL,
user_id INT NULL,
CONSTRAINT tb_order_id_uindex
UNIQUE (id),
CONSTRAINT tb_order_tb_consumer_id_fk
FOREIGN KEY (user_id) REFERENCES tb_consumer (id)
)
ENGINE = InnoDB;
CREATE INDEX tb_order_tb_consumer_id_fk
ON tb_order (user_id);
CREATE TABLE tb_item
(
order_id INT NOT NULL,
amount INT NULL,
code VARCHAR(18) NULL,
article_id INT NOT NULL,
PRIMARY KEY (order_id, article_id)
)
ENGINE = InnoDB;
其中,consumer和order是一对多关系,一个顾客有多个订单;order和article是多对多的关系,中间表是item,一个订单可以有多个商品,一个商品也可以在多个订单上,所以是多对多关系。
POJO类:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33//TbConsumer.java
public class TbConsumer {
private long id;
private String username;
private String loginname;
private String password;
private String phone;
private String address;
private List<TbOrder> tbOrders;
//setter,getter
//TbOrder.java
public class TbOrder {
private long id;
private String code;
private double total;
private long userId;
private TbConsumer tbConsumer;
private List<TbArticle> articleList;
//setter,getter
//TbArticle.java
public class TbArticle {
private long id;
private String name;
private double price;
private String remark;
private List<TbOrder> tbOrders;
//getter,setter
1.xml配置
1 | //ConsumerMapper.xml |
因为多表查询返回结果中tb_consumer中有id列,tb_order中也有id列,所以需要区分,例如使o.id as oid,resultMap中的column=”oid”就是指tb_order表中的id值。
相应Java类:1
2
3
4
5
6
7
8
9
10
11
12
13public interface ConsumerMapper {
TbConsumer selectConsumerById(Integer id);
}
public interface OrderMapper {
TbOrder selectOrderById(Integer id);
TbOrder selectOrderByUserId(Integer id);
}
public interface ArticleMapper {
TbArticle selectArticleByOrderId(Integer id);
}
2.测试
1 | public class ManyToManyTest { |