[图解]企业应用架构模式2024新译本讲解22-标识映射

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

就判断在不在里面就行了

相关推荐
Javatutouhouduan13 天前
刚入行Java,如何深入学习JVM底层原理?
java·jvm·面试·程序员·架构师·八股文
power-辰南18 天前
Kafka 常见面试题深度解析
java·大数据·分布式·kafka·架构师·消息中间件·2024面试题
rolt21 天前
[pdf,epub]228页《分析模式》漫谈合集01-45提供下载
ddd·架构师·uml·领域驱动设计·面向对象
战神刘玉栋22 天前
《通俗易懂 · JSqlParser 解析和构造SQL》
架构师·jsqlparser
rolt1 个月前
[pdf,epub]162页《分析模式》漫谈合集01-35提供下载
ddd·架构师·uml·领域驱动设计·面向对象
rolt1 个月前
中文书籍对《人月神话》的引用(161-210本):微软的秘密
软件工程·产品经理·架构师
rolt2 个月前
[pdf,epub]105页《分析模式》漫谈合集01
ddd·架构师·uml·领域驱动设计·分析模式
Javatutouhouduan2 个月前
Java程序员如何获得高并发经验?
java·分布式·后端·程序员·高并发·架构师
Javatutouhouduan2 个月前
有哪些 Java 面试题 90% 的公司都会问到?
java·后端·面试·程序员·架构师·八股文
W Y3 个月前
【架构设计模式-2】创建型、结构型、行为型等设计模式
设计模式·架构·系统架构·架构师·软考