1
00:00:00,040 --> 00:00:03,300
接下来,我们就来看一下代码的示例了
2
00:00:06,910 --> 00:00:09,180
我们同样一步一步来看一下
3
00:00:35,030 --> 00:00:36,950
首先初始化数据
4
00:00:37,870 --> 00:00:41,620
这个地方跟之前我们举的例子是一样的
5
00:00:44,970 --> 00:00:47,640
建立连接,打开连接,这一样的
6
00:00:48,170 --> 00:00:49,760
同样,这个连接,我们后面用的
7
00:00:49,770 --> 00:00:53,530
依然是SQLite的数据库
8
00:00:55,080 --> 00:00:57,460
然后创建命令
9
00:00:58,330 --> 00:01:00,320
然后就执行命令了
10
00:01:00,330 --> 00:01:03,510
如果有以前剩下的表,删除掉
11
00:01:06,100 --> 00:01:06,390
12
00:01:07,190 --> 00:01:08,890
然后创建Person表
13
00:01:08,900 --> 00:01:12,450
然后插入初始数据
14
00:01:12,460 --> 00:01:14,250
这都一样的
15
00:01:18,300 --> 00:01:23,890
我们看第一个,查询
16
00:01:24,460 --> 00:01:26,010
我们看第一个示例,查询
17
00:01:28,250 --> 00:01:29,400
查询这里
18
00:01:30,860 --> 00:01:32,020
获取所有人员
19
00:01:33,420 --> 00:01:38,320
首先,它这里就先创建一个映射器
20
00:01:39,230 --> 00:01:40,550
PersonMapper
21
00:01:40,560 --> 00:01:41,990
人员映射器
22
00:01:42,160 --> 00:01:45,690
这显然是一个具体的映射器
23
00:01:46,990 --> 00:01:49,640
但是你看我们new这个的时候
24
00:01:51,340 --> 00:01:52,520
它是跳到这里来的
25
00:01:52,650 --> 00:01:54,920
跳到抽象的映射器这里来的
26
00:01:56,820 --> 00:01:59,520
因为在PersonMapper这里面
27
00:01:59,530 --> 00:02:03,680
没有构造器
28
00:02:04,890 --> 00:02:11,040
这里面也没有,就会什么
29
00:02:12,080 --> 00:02:18,740
缺省认为给你一个没有参数的构造器
30
00:02:20,050 --> 00:02:22,740
相当于用的是
31
00:02:23,200 --> 00:02:27,230
它的超类的一个没有参数的、无参的构造器
32
00:02:27,490 --> 00:02:29,000
反正有这么一个东西给你
33
00:02:29,450 --> 00:02:31,810
实例化一个东西出来就行
34
00:02:34,300 --> 00:02:40,480
抽象映射器这里,定义了一个字典
35
00:02:40,570 --> 00:02:43,960
这跟之前我们看活动记录一样
36
00:02:43,970 --> 00:02:47,680
用来作为存放标识映射的地方
37
00:02:47,810 --> 00:02:48,160
38
00:02:49,020 --> 00:02:54,190
LoadedMap,已加载的映像
39
00:02:54,400 --> 00:02:55,750
已加载的映射
40
00:02:56,910 --> 00:03:00,110
这是键,这是里面的对象
41
00:03:00,280 --> 00:03:07,580
就用LoadedMap来存放
42
00:03:09,860 --> 00:03:11,780
已经加载的领域对象
43
00:03:13,420 --> 00:03:14,490
好,这个有了
44
00:03:16,140 --> 00:03:18,850
然后就调用它的findall
45
00:03:18,860 --> 00:03:22,450
这样的一个操作
46
00:03:23,840 --> 00:03:25,790
mapper的findall操作
47
00:03:32,060 --> 00:03:34,180
那么这个操作就返回
48
00:03:34,190 --> 00:03:36,020
一个Person的列表了
49
00:03:39,080 --> 00:03:41,550
这里面的代码,我们看
50
00:03:45,350 --> 00:03:52,280
首先它new了这样一个对象
51
00:03:58,130 --> 00:04:02,000
findall语句的这样一个对象
52
00:04:02,740 --> 00:04:04,020
这个是一个类
53
00:04:04,430 --> 00:04:07,610
把它定义成一个类的形式
54
00:04:07,900 --> 00:04:09,780
我们看在new完之后
55
00:04:11,330 --> 00:04:13,210
一会我们再看这里面,new完之后
56
00:04:13,220 --> 00:04:17,150
它把它传给findmany
57
00:04:17,160 --> 00:04:18,590
作为参数
58
00:04:22,400 --> 00:04:25,930
然后就得回来一个集合
59
00:04:25,940 --> 00:04:29,410
然后再把这个集合变成Person对象
60
00:04:29,420 --> 00:04:32,470
然后转成列表返回来
61
00:04:33,580 --> 00:04:35,570
首先肯定是先执行这个了
62
00:04:36,960 --> 00:04:38,510
我们看这个是什么东西
63
00:04:39,270 --> 00:04:39,940
往下走
64
00:04:40,960 --> 00:04:46,590
在这里,你看,它实现了这样一个接口
65
00:04:49,350 --> 00:04:50,540
这个接口是什么
66
00:04:50,630 --> 00:04:52,520
我们来看一下它的定义
67
00:04:55,880 --> 00:04:57,950
很简单就是一个包装
68
00:04:57,960 --> 00:05:01,070
这个里面有一个SQL的字符串
69
00:05:01,080 --> 00:05:04,280
实际上就是SQL语句
70
00:05:04,290 --> 00:05:05,780
只不过这个SQL语句
71
00:05:05,910 --> 00:05:09,480
可能留下了某些参数的空档在里面
72
00:05:10,270 --> 00:05:11,890
第二个就是参数列表
73
00:05:11,900 --> 00:05:16,860
是一个对象数组,里面放参数
74
00:05:17,110 --> 00:05:18,870
就是SQL是哪一句
75
00:05:19,220 --> 00:05:21,800
然后具体的参数值是哪些
76
00:05:21,810 --> 00:05:24,300
就放在这里,这是接口
77
00:05:26,660 --> 00:05:32,460
然后各个类,用的时候,自己去实现这个接口
78
00:05:34,310 --> 00:05:36,520
就把SQL语句
79
00:05:36,530 --> 00:05:39,660
你要发给数据库的SQL语句
80
00:05:39,670 --> 00:05:43,920
变成一个实现接口的类
1
00:00:00,550 --> 00:00:04,650
好,我们看这里,它实现的接口
2
00:00:04,660 --> 00:00:05,970
你看,这个类是一个什么
3
00:00:05,980 --> 00:00:08,810
是一个在PersonMapper
4
00:00:08,820 --> 00:00:11,930
这里面的一个内部类
5
00:00:16,290 --> 00:00:17,790
实现这个,说明什么
6
00:00:17,800 --> 00:00:20,860
它里面就会有一个SQL语句
7
00:00:21,240 --> 00:00:23,810
然后一个对象的参数数组
8
00:00:24,150 --> 00:00:27,450
对象数组保存参数,SQL语句
9
00:00:29,040 --> 00:00:31,400
给它赋值赋成这个了
10
00:00:32,370 --> 00:00:34,780
然后参数的数组没有,空的
11
00:00:35,290 --> 00:00:37,610
因为这个语句不需要参数
12
00:00:37,620 --> 00:00:41,660
13
00:00:42,480 --> 00:00:49,630
好,现在得到一个刚才的实例了
14
00:00:49,880 --> 00:00:51,110
里面有一个SQL语句
15
00:00:53,990 --> 00:00:55,070
一个参数数组
16
00:00:56,900 --> 00:00:59,310
然后把它传给findmany
17
00:01:00,510 --> 00:01:03,290
我们看,findmany在哪里
18
00:01:08,900 --> 00:01:13,060
那么这个是在抽象的映射器里面定义的
19
00:01:14,490 --> 00:01:18,810
你看,这是刚才定义的接口
20
00:01:19,410 --> 00:01:25,860
然后给它,返回的是领域对象的列表
21
00:01:26,940 --> 00:01:34,440
我们看这里面,首先创建并打开连接
22
00:01:37,310 --> 00:01:38,420
一样的
23
00:01:41,500 --> 00:01:42,490
这里,这一句
24
00:01:43,910 --> 00:01:47,770
首先把SQL这个,它有两个属性
25
00:01:47,940 --> 00:01:49,890
一个SQL,一个是对象数组
26
00:01:50,660 --> 00:01:52,470
把这个拿出来,在这里
27
00:01:52,480 --> 00:01:56,830
里面的值是select什么
28
00:01:57,900 --> 00:01:58,330
放这里
29
00:01:58,500 --> 00:02:02,630
用它来构造command对象
30
00:02:03,690 --> 00:02:05,980
然后再把这个里面
31
00:02:07,300 --> 00:02:10,420
这里面的参数数组的属性拿出来
32
00:02:11,040 --> 00:02:13,460
在这里,实际上啥也没有
33
00:02:14,830 --> 00:02:16,390
如果有,就拿出来
34
00:02:16,400 --> 00:02:20,570
一个一个,类型就object就行了
35
00:02:21,170 --> 00:02:25,770
值,就是这里面这个,就是数组里面的值
36
00:02:26,500 --> 00:02:28,240
然后添加参数,我们这里没有
37
00:02:28,750 --> 00:02:34,650
因为我们这个是查询所有
38
00:02:34,780 --> 00:02:36,050
因为参数是没有的
39
00:02:38,350 --> 00:02:39,920
然后就执行查询了
40
00:02:41,910 --> 00:02:43,960
执行查询就返回来所有的人了
41
00:02:47,490 --> 00:02:50,560
reader里面就有
42
00:02:50,570 --> 00:02:52,840
所有的Person的数据,因为返回来所有
43
00:02:52,850 --> 00:02:54,310
在这里了
44
00:02:54,690 --> 00:02:58,090
然后,这里面你看,这有一个loadall
45
00:02:58,100 --> 00:03:01,940
就是说,把它全部加载
46
00:03:02,540 --> 00:03:06,010
把reader里面的内容加载到领域对象
47
00:03:06,740 --> 00:03:07,450
并且返回
48
00:03:08,460 --> 00:03:12,910
我们看这里面,loadall
49
00:03:12,920 --> 00:03:16,670
这个是在抽象映射器里面定义的
50
00:03:17,120 --> 00:03:19,110
在这个类里面定义的
51
00:03:22,170 --> 00:03:25,390
这是reader作为参数
52
00:03:25,400 --> 00:03:28,430
返回是领域对象的一个数组,一个列表
53
00:03:30,400 --> 00:03:32,550
首先创建一个列表
54
00:03:35,930 --> 00:03:38,410
然后,这里面逐行逐行
55
00:03:39,480 --> 00:03:43,840
来把它load到这个对象里面
56
00:03:43,850 --> 00:03:45,560
然后添加到领域对象列表
57
00:03:45,570 --> 00:03:47,610
你看,一行一行读
58
00:03:47,620 --> 00:03:52,400
读完之后,你看这里,首先是Load(reader)
59
00:03:54,410 --> 00:03:55,170
读完一行
60
00:03:55,180 --> 00:03:58,810
那么针对这一行把它load到领域对象里面
61
00:03:59,880 --> 00:04:02,750
那么我们看load这个,到这里
62
00:04:04,720 --> 00:04:07,060
load也是在这里面
63
00:04:07,410 --> 00:04:08,710
抽象映射器里面的
64
00:04:10,310 --> 00:04:15,210
那么load这个是做什么
65
00:04:16,140 --> 00:04:18,410
我们看上面这里,我注释了一下
66
00:04:19,440 --> 00:04:21,760
根据当前行返回领域对象
67
00:04:22,240 --> 00:04:26,720
首先,如果标识映射里面有的
68
00:04:27,960 --> 00:04:30,200
那就直接返回标识映射里面就行了
69
00:04:31,300 --> 00:04:34,760
就不用把reader里面
70
00:04:34,770 --> 00:04:36,840
那个东西拿出来赋值,不要了
71
00:04:38,420 --> 00:04:41,960
如果没有
72
00:04:42,890 --> 00:04:46,360
首先映射里面要把它加进去了
73
00:04:47,250 --> 00:04:50,740
首先要构造出一个领域对象
74
00:04:51,320 --> 00:04:52,800
把它变成一个领域对象
75
00:04:52,810 --> 00:04:54,480
然后把它加到映射里面去
76
00:04:55,890 --> 00:05:00,110
那么就用这个doload来映射
77
00:05:05,190 --> 00:05:10,480
这里就用到一个标识映射的模式了
78
00:05:10,610 --> 00:05:12,880
我们前面也用到,我们前面没有讲
79
00:05:13,670 --> 00:05:15,120
所以我们就来讲一下
80
00:05:15,650 --> 00:05:18,350
标识映射这样一个模式