Mermaid 类图与 ER 图
# Mermaid 类图与 ER 图
# 一、类图解决什么问题
类图描述系统中类的结构以及类之间的关系。在做架构设计、代码评审、或者看开源项目时,一张类图胜过千言万语。
# 二、类定义
# 2.1 基础语法
classDiagram
class User {
+String name
+int age
+login() bool
+logout() void
}
1
2
3
4
5
6
7
2
3
4
5
6
7
成员可见性符号:
| 符号 | 含义 |
|---|---|
+ | public |
- | private |
# | protected |
~ | package/internal |
# 2.2 属性与方法类型
classDiagram
class Order {
+String orderId
-BigDecimal amount
#OrderStatus status
+create() Order
-validate() bool
#calculateTotal() BigDecimal
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
用括号 () 区分方法和属性:
+String name 属性:可见性 + 类型 + 名称
+login() bool 方法:可见性 + 名称() + 返回类型
1
2
2
# 2.3 泛型
classDiagram
class Repository~T~ {
+save(T entity) void
+findById(Long id) T
+findAll() List~T~
}
1
2
3
4
5
6
2
3
4
5
6
class Repository~T~ 类定义泛型
List~T~ 属性/返回类型泛型
1
2
2
# 2.4 抽象类和接口
classDiagram
class Animal {
<<abstract>>
+String name
+eat()* void
+sleep() void
}
class Flyable {
<<interface>>
+fly() void
}
class Bird {
+fly() void
+eat() void
}
Animal <|-- Bird
Flyable <|.. Bird
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<<abstract>> 抽象类标记
<<interface>> 接口标记
* 抽象方法(方法后加 *)
1
2
3
2
3
# 三、六种关系
| 关系 | 语法 | 含义 | 代码体现 |
|---|---|---|---|
| 继承 | <\|-- | is-a | class Dog extends Animal |
| 实现 | <\|.. | can-do | class Bird implements Flyable |
| 组合 | *-- | has-a(强) | 成员变量,同生命周期 |
| 聚合 | o-- | has-a(弱) | 成员变量,独立生命周期 |
| 关联 | --> | uses-a | 方法参数/返回值 |
| 依赖 | ..> | depends-on | 局部变量/静态调用 |
classDiagram
Animal <|-- Dog : 继承
Animal <|-- Cat : 继承
Flyable <|.. Bird : 实现
Car *-- Engine : 组合
Library o-- Book : 聚合
User --> Order : 关联
Service ..> Repository : 依赖
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 关系标签与基数
classDiagram
Customer "1" --> "*" Order : 拥有
Order "1" --> "1..*" OrderItem : 包含
Student "1..*" --> "1..*" Course : 选修
1
2
3
4
2
3
4
"1" 一个
"0..1" 零或一个
"1..*" 一到多个
"*" 零到多个
"n" 精确n个
1
2
3
4
5
2
3
4
5
# 四、实战:电商订单领域模型
classDiagram
class User {
+Long id
+String name
+String email
+register() void
+login() bool
}
class Order {
+String orderNo
+BigDecimal totalAmount
+OrderStatus status
-LocalDateTime createTime
+create() Order
+pay() bool
+cancel() void
}
class OrderItem {
+Long id
+String productName
+int quantity
+BigDecimal unitPrice
}
class Product {
+Long id
+String name
+BigDecimal price
-int stock
+reduceStock(int) bool
}
class Payment {
<<interface>>
+pay(Order) bool
+refund(Order) bool
}
class Alipay {
+pay(Order) bool
+refund(Order) bool
}
class WechatPay {
+pay(Order) bool
+refund(Order) bool
}
class Logistics {
+String trackingNo
+LogisticsStatus status
+ship() void
}
User "1" --> "*" Order : 创建
Order "1" *-- "1..*" OrderItem : 包含
OrderItem "*" --> "1" Product : 对应
Payment <|.. Alipay : 实现
Payment <|.. WechatPay : 实现
Order --> Payment : 使用
Order "1" --> "0..1" Logistics : 关联
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 五、ER 图(Entity Relationship)
ER 图描述数据库表之间的关系,替代 Excel 画表结构。
# 5.1 基础语法
erDiagram
USER ||--o{ ORDER : "下单"
ORDER ||--|{ ORDER_ITEM : "包含"
PRODUCT ||--o{ ORDER_ITEM : "被选"
1
2
3
4
2
3
4
|| 必须一
|o 一或零
}| 一或多
}o 零或多
1
2
3
4
2
3
4
# 5.2 实体定义
erDiagram
USER {
bigint id PK
varchar name
varchar email UK
datetime created_at
}
ORDER {
bigint id PK
varchar order_no UK
bigint user_id FK
decimal total_amount
tinyint status "1待付2已付3已取消"
datetime created_at
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PK 主键
UK 唯一键
FK 外键
"注释" 字段说明
1
2
3
4
2
3
4
# 5.3 实战:电商数据库 ER 图
erDiagram
USER ||--o{ ORDER : 创建
USER ||--o{ ADDRESS : 拥有
USER ||--o{ CART_ITEM : 购物车
ORDER ||--|{ ORDER_ITEM : 包含
ORDER ||--|| PAYMENT : 支付
ORDER ||--o| LOGISTICS : 物流
PRODUCT ||--o{ ORDER_ITEM : 被选
PRODUCT ||--o{ CART_ITEM : 加入
CATEGORY ||--o{ PRODUCT : 分类
USER {
bigint id PK
varchar nickname
varchar email UK
varchar phone UK
tinyint status
}
ORDER {
bigint id PK
varchar order_no UK
bigint user_id FK
decimal total_amount
tinyint status "1待付2已付3发货4完成5取消"
}
PRODUCT {
bigint id PK
varchar name
decimal price
int stock
bigint category_id FK
}
PAYMENT {
bigint id PK
bigint order_id FK
varchar pay_channel "alipay/wechat"
tinyint status
}
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
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
# 六、速查
┌──────────────────────────────────────────────┐
│ Mermaid 类图 & ER图速查 │
├──────────────────────────────────────────────┤
│ 类图 │
│ class Name { +属性 -方法() } │
│ <<abstract>> <<interface>> <<enum>> │
│ <|-- 继承 <|.. 实现 *-- 组合 o-- 聚合 │
│ --> 关联 ..> 依赖 │
│ class Name~T~ 泛型 │
│ │
│ ER图 │
│ ENTITY { type name KEY } │
│ ||--|| 一对一 ||--o{ 一对多 │
│ }|--|{ 多对多 ||--o| 一或零 │
│ PK 主键 UK 唯一 FK 外键 │
└──────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
🏃 下一篇:状态图与Git图——状态流转、复合状态、分支合并、Git分支提交可视化。
上次更新: 2026/06/07, 09:20:35