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 { |