1
00:00:01,080 --> 00:00:04,710
我們來看一下標識映射這個模式
2
00:00:08,030 --> 00:00:10,110
它是屬于對象-關系
3
00:00:10,120 --> 00:00:11,150
行為模式
4
00:00:11,160 --> 00:00:13,890
就是說,在動態的時候
5
00:00:15,770 --> 00:00:17,230
訪問數據庫,加載
6
00:00:17,730 --> 00:00:22,150
或者說寫入數據庫等等的時候
7
00:00:22,810 --> 00:00:27,230
需要用到的一個行為的模式
8
00:00:27,240 --> 00:00:30,360
行為模式
9
00:00:30,370 --> 00:00:33,120
有這么幾個,標識映射是其中一個
10
00:00:35,670 --> 00:00:37,340
我們來看它的定義
11
00:00:38,100 --> 00:00:41,210
這個是很簡單的一個模式了
12
00:00:44,480 --> 00:00:45,680
在映射中
13
00:00:46,530 --> 00:00:49,780
在一個mapper里面保存
14
00:00:49,790 --> 00:00:51,460
每個已經加載的對象
15
00:00:52,290 --> 00:00:54,810
目的是確保每個對象只加載一次
16
00:00:57,110 --> 00:00:58,540
需要引用對象的時候
17
00:00:58,550 --> 00:01:00,340
通過映射來查找它們
18
00:01:01,360 --> 00:01:03,030
這里有個查找器
19
00:01:03,800 --> 00:01:05,500
映射,查找
20
00:01:09,380 --> 00:01:11,040
找到了就用
21
00:01:11,560 --> 00:01:13,060
找不到說明什么
22
00:01:13,500 --> 00:01:15,780
沒有加載,就要到數據庫里面去
23
00:01:16,620 --> 00:01:23,350
你看這里,沒找到,數據庫里面去拿
24
00:01:26,500 --> 00:01:30,980
再把它加載到map里面
25
00:01:31,650 --> 00:01:32,590
映射里面
26
00:01:34,740 --> 00:01:38,420
這里面有幾個要關注的點
27
00:01:38,510 --> 00:01:39,780
第一個,主鍵
28
00:01:42,230 --> 00:01:45,220
那么盡量都就用這種無意義代理主鍵了
29
00:01:45,230 --> 00:01:48,460
而且類型要一樣的
30
00:01:48,590 --> 00:01:50,660
一般類型要么是長整數
31
00:01:50,750 --> 00:01:53,680
要么是字符串
32
00:01:55,770 --> 00:01:56,770
類型一樣的
33
00:01:56,780 --> 00:02:02,280
就不要那種花里胡哨的主鍵,代理主鍵
1
00:00:00,570 --> 00:00:04,360
第二個問題就是這個,就是接口
2
00:00:04,370 --> 00:00:06,980
到底是這樣的顯式的接口
3
00:00:06,990 --> 00:00:08,220
還是通用的接口
4
00:00:10,860 --> 00:00:13,750
書里面是推薦的第一種了
5
00:00:14,660 --> 00:00:16,860
第一種,你就要寫很多個了
6
00:00:16,870 --> 00:00:20,660
有多少個表,多少個類
7
00:00:20,670 --> 00:00:22,710
你就搞多少個
8
00:00:22,970 --> 00:00:24,740
第二個只要一個就夠了
9
00:00:25,290 --> 00:00:27,020
而且還可以反復使用
10
00:00:27,030 --> 00:00:32,740
這個系統用了
11
00:00:32,750 --> 00:00:35,840
那下一個系統可以copy用都可以
12
00:00:38,020 --> 00:00:39,990
你只要改里面的數據就行了
13
00:00:40,750 --> 00:00:46,350
表名,主鍵,這個是硬寫在這里的
14
00:00:48,650 --> 00:00:50,090
那么如果這樣寫
15
00:00:50,100 --> 00:00:51,540
它就變成一個什么
16
00:00:51,550 --> 00:00:57,020
跟這個領域沒有關系的一個操作了
17
00:00:57,030 --> 00:00:59,860
而這個是把領域概念直接嵌到里面去了
18
00:01:02,480 --> 00:01:04,360
那么顯然你換一個系統
19
00:01:04,370 --> 00:01:07,080
換一個領域就沒有了,這就不能用了
20
00:01:08,890 --> 00:01:11,240
這只需要一個,這個要很多個
21
00:01:11,640 --> 00:01:15,050
但是書里面仍然是推薦這一種
22
00:01:15,420 --> 00:01:20,140
這種編譯的時候
23
00:01:21,870 --> 00:01:22,950
可以編譯在里面
24
00:01:22,960 --> 00:01:24,030
然后就可以判斷出
25
00:01:24,040 --> 00:01:26,590
有哪些映射是可以用的
26
00:01:26,940 --> 00:01:28,790
可以做編譯時的檢查
27
00:01:30,550 --> 00:01:32,510
而這個是運行的時候
28
00:01:33,180 --> 00:01:35,650
根據這里面的參數來判斷
29
00:01:40,890 --> 00:01:43,440
這是第二點
30
00:01:44,240 --> 00:01:44,760
第三點
31
00:01:47,610 --> 00:01:51,270
有幾個這種標識映射
32
00:01:52,810 --> 00:01:57,960
那就要看你的數據庫里面主鍵
33
00:01:57,970 --> 00:02:00,540
你是怎么來設置的
34
00:02:00,790 --> 00:02:04,560
如果說你每個表的主鍵是分立的
35
00:02:05,520 --> 00:02:05,940
這是一種
36
00:02:05,950 --> 00:02:06,660
第二個是什么
37
00:02:06,670 --> 00:02:07,540
數據庫里面
38
00:02:09,070 --> 00:02:11,290
同一個數據庫里面的所有的表
39
00:02:11,300 --> 00:02:12,650
它主鍵都是什么
40
00:02:13,200 --> 00:02:14,120
都是不同的
41
00:02:16,290 --> 00:02:17,170
如果是這樣
42
00:02:17,180 --> 00:02:19,170
你這里的映射只需要一個就行了
43
00:02:20,250 --> 00:02:24,120
如果說有多個,映射就有多個
44
00:02:26,130 --> 00:02:28,440
Fowler的意思就是說
45
00:02:29,960 --> 00:02:31,450
推薦每個泛化樹
46
00:02:32,200 --> 00:02:34,300
就一個標識映射
47
00:02:35,770 --> 00:02:39,680
也就是說,在我們設定主鍵的時候
48
00:02:41,100 --> 00:02:45,500
每棵泛化樹,超類子類這一棵樹
49
00:02:46,500 --> 00:02:49,090
它們用的主鍵應該是一致的
50
00:02:51,760 --> 00:02:53,070
那個算是一個體系
51
00:02:53,080 --> 00:02:59,510
那就每棵泛化樹就一個標識映射
52
00:03:02,200 --> 00:03:05,410
主要是這么一點知識點
53
00:03:05,500 --> 00:03:07,930
因為這本身也沒有什么太多的內容了
54
00:03:09,240 --> 00:03:11,110
就有一個在這里要查一下
55
00:03:11,120 --> 00:03:14,990
就判斷在不在里面就行了