00:00
好,我们现在来看看啊,来看看现在啊,这个增删改查注意看啊,我们对比的这个控制台来看。Clear一下。好,现在做添加走一个好使吧。啊,再来修改,然后删除啊,最后是查询OK吧,为什么啊,我们要这个学一个模板模式呢,为什么?因为咱们这个阶段,比如说要做项目对不对,每天需求会很多,我们不可能针对于每一个需求来做一个so类,可能不可能OK吧,好,第一个很累,第二个它也不合理,OK吧,所以说我们以后肯定是一个模块什么呢?一个so that OK吧,一个模块,一个so that啊行了,这个模板模式咱们也过了啊,这个模板啊,今天晚上回去一定要打OK吧,你看似简单啊,回去自己搭试一试,因为这所有的东西都是以我们这个阶段敲的项目为主,OK吧,好多熟悉熟悉啊,今天就当练手啊好呃,我们最后一个啊,这个UUID的这个应用啊,这UUID是做什么呢?UID是做组件的啊。
01:16
我们现在来研究一下这个组件的这个设置啊,同学们好,注意力集中呢。好,注意力集中了啊。好主见,今天上午问大家一个问题。主键用什么类型的,同学们一律回答的什么呢?In或者是这个big big in其实就是long对吧,啊或者是这个它double不太可能浮典型,他不可能当主线对吧,好,我现在问问你们啊,为什么。用整形呢?以前为什么用老枪来回答一下。
02:05
因为整形能够什么自动递增啊这个啊,开发时这个啊使用方便是这样吗?开发时使用方便啊好,我们来例如。嗯,现在比如说我现在新添一条记录啊TBL,比如说吧。好,我比如说ID name和咱们来values。呃,我们so后语句啊,如果正常解读肯定是这么做的,对不对,但是啊,组件能递增呢,这个ID怎样呢。可以不写对不对,就是一个好处,除了这个好处之外呢。没了啊,没别的好处了,OK吧,好,但是大家注意啊,我们以后实际项目开发中啊,实际项目开发中啊,我们很少使用这个啊,整形这个作为主件。
03:15
来使用啊,很少。为啥呢?就是因为你这个自动递增搞的鬼。哎,他一下从优优点变成什么呢,缺点了。就是因为这个自动递增的这个问题啊。自动递增好好的,招谁惹谁了,为什么我要抨击他呢?大家现在想这么一个问题啊,比如说啊,我现在数据库表里边啊,一共有五条记录,12345行吗?我现在新增一条记录,如果你使用的是这种组件自增的这种机制,大家现在想这么一个问题,我没有写ID,它会会不会自动给你递增一下,把这个ID给填上是六,这个没问题吧。
04:08
对吧?好,这也是我们想要的结果,但是大家想一想,人家这六凭什么给你讲啊。凭什么?老师那数据库的机制人就给我加了,也就人家给你加怎么加的,怎么就这么智能吗?你上来就知道一共有五条记录,然后我第六条记录就二个六吗。有同学说数出来了,好,我现在把第三条记录。干掉了,我现在一共是几条,我现在一共是四条啊,如果你是数出来的,大家想一想四条四条怎么办,我就再加一条是五条。第五条你能写个五吗?是不是组件重复了?对吧,所以说它不是数出来的,它是怎么出来的。它会查询出来什么呢?从你这些记录里边查询出来一个最大值,OK吧,在最大值的基础之上干嘛呀,加一,所以说在我们做添加之前,它会自动的做一个什么操作,查询操作。
05:15
啊,你想一想啊,就相当于一步我们变成了两步对不对,这两步是不是就耗效率了。对吧,老师,我之前做的这个添加操作,我也没觉得什么好效率啊,没有什么感觉啊。为什么没感觉?哎,咱们的数据量太小,你想一想啊,咱们是不是还没有玩过超过100条以上的记录。别说100条了,我靠,可能20条都没过过是吧?呃,大家注意啊,我们将来玩的都是什么呢?同学们可以想一想,我们将来玩的都是海量级别数据,在某些企业里边,什么叫海量级别数据啊啊,怎么也得上千万条。至少千万条记录以上,2000到三千万条记录以上。
06:06
啊,有可能是E级别的数据,也有可能OK吧,好,大家想一想,如果是这些记录的话,你想一想,从三千万条记录中选一个最大值,是不是得挨个比呀?能理解老师意思吗?那它还真不是你们所说那个数出来要数就简单了,它是不是记录一个总条数就行了,在总条数的基础上加一就行了,对吧?那问题在于它不是总条数。是这样吗?有可能你这张表中啊,呃,中间有一些记录就干掉了,总条数和你真正的数字它是不相符的,有可能是这样吗?所以说他肯定不是数的,是条数,它是挨个比较出来拿的这么一个数字,如果说。是按照我们以后这个开发来,数据量大的话,你在做一个添加的时候,这个我可是我们真正能够看得到,肉眼能够看得到的现象级别的效率的这个减面减慢OK吧,所以说我们以后啊,很少使用这种组件自增的这种机制,OK吧,好啊,他还得查一个最大值,OK吧,老师啊,那这个虽然组件自动递增不好,但是我还是想用正方形,我对123456比较亲啊,那么。
07:22
我手动的给他填上不就行了,行不行。也就是说啊,在这我不自动递走了,但是我还是用int。我ID我自己填。好。我这问号给他填上,我这哎,我ID我这回自己填,我自己填不就得了吗。你想你自己填,你填。我在这块最大的是一个五,你是不是填个六啊,你请告诉我,你那个六是从哪来的,你是不是在后台,在你加我代码中是不是也得算出来一个最大值啊,那说白了就是从数据库表中什么呢?人家数据库自动帮你算,现在变成什么呢?你写在Java代码中了。
08:04
是这样吧,其实都是一个道理啊,所以啊,我们以后这个整形啊啊,但其实啊,有时候也用啊,数据量比较少的时候也用,因为它确实方便,OK吧,但是大部分情况下咱们都不用OK吧,好,我们未来实际项目开发都是用什么呢?啊,实际项目开发啊,使用什么呢?这个啊字符串当做。这个啊,主键字段类型啊比较多啊,啊这个还是比较多的,那大家现在可以思考这么一个问题啊,我用一个字符串当组件。用什么字符串呢?首先我们先来分析一下这个组件吧。组件约束是由两种约束来构成的,一种约束叫什么呢?非空加什么呢?
09:01
唯非空这个好理解,只要你在程序中你填ID了,你你填了它就是非空了,对不对?现在问题在于我们如何来解决它的唯一性,如何解决,来分析一下。用什么?我说随机数。还什么说?为唯一约束。不是啊,我现在指的是我现在要做一个字符串,当这个组件呢,对吧,我如何来确保它的这个唯一星。哎,有同学说出来我听到了啊,不知道哪同学说的啊,有同学说个时间这个大好像是这个这这边这个位置啊,时间可以,哎,首先随机数可以有同学。真可以啊,随处行行行行行行,多多给你来几位行吗?
10:02
啊,第二次生的跟第一次你都就能确保百分百不一样吗?你即使第二次跟第一次它它它不一样,那第三次呢,那第N次呢,是这样吗?啊那老师我这个位数多来点行吗?其实你位数再来的再多,那彩票那玩意儿虽然概率低,那也容易中奖。对不对,它也不保险啊,对吧,啊时间呢。可以,时间其实在咱们以后啊,会说到一个这个时间出来的这个概念啊,有点类似于咱们这个生产日期时间,咱们来看用时间生行行,我生成一个当前系统时间,Date date new date可以吧,当前系统时间咱们来一个,比如说2019年行吗?十月。十号,然后什么呢?10:10:10。123毫秒。可以。我拿他当主见,行。
11:02
思考思考,别等咱。如果自己用的话有问题。就自己用的话是没有问题啊,没有肯定没问题,为什么。你自己用,你前一秒咱就别说毫秒了啊,你你你上一秒录的记录和你下一秒录的记录,他所生成的这一串字符串的100%是不一样的,是这样吗?所以说它是可以当组件的,但是它有点怕什么呢?他怕并发,并发量高,OK吧,比如说啊,咱们一起来填写这张表单,是这样吧,然后一起来提交这张表单,那么在同一张这个表当中。是不是有可能生成的,什么时间的这个毫秒都是一样的,是这样的,那比如说啊,每年双11你想一想对吧,半夜12点,全世界1/5人口大病发。
12:01
对吧,啊生成的,你要那晚上12点肯定就一顿生订单嘛,对不对,好,你要用这玩意儿当组件的话,那肯定毫秒创上老多了,是这样吗?好不可能用它当主键,OK吧,好嗯,还有一种方式是什么呢?其实可以用的方式啊,就是用时间加什么呢。随机数,这个是以前有一个学生发明的啊,我觉得这种方式非常棒啊,你想一想,毫秒撞上了,你后边生成的随机数也撞上了,这种概率是不是会很低啊?哎,两个人点击鼠标,连好友都要卡一点,点完之后生成一串数据,数也一样。啊,这种概率其实很低的,OK吧,好,但是在理论上他有可能发生对吧,也有可能,呃,但是这种其实说句实话也能用了,也能用,那如果客户出现这种问题的话,有可能十年八年也出不了一回,OK吧,如果真出现了。
13:00
你就让他再录一条呗,对吧,这个无所谓了,OK吧,但是啊,这个今天老师说的不是这个OK吧,我今天要说的是一个什么呢?除了在咱们这个设计之外啊,咱们还有一个啊,以后实际项目开发中最通用一种方式叫什么呢?UUID,以UUID的方式来升组件,这其实是我们的U这个工具包给我们提供的一个很好用的类OK吧,好,我们使用啊。这个UUID啊,好,会为我们生成A。好一组啊,由数字。字母以及这个横杠所这个啊组成的。随机串啊,随机串啊,好,这个随机串。有。
14:00
36位啊,好,那么这个随机串。好,一定是什么呢?全世界唯一的啊,他一定是不会重复的。OK吧,好,我们现在啊,来先看一下啊。嗯,我在这里边再来个紫包啊。嗯,比如说来一个test。好,里面呢,我再来一个主方法。好,来一个太一吧。处方法怎么说来着?VM对吧,好,我们现在来看啊,UUID,看看哪个包呢,同学们。哎,U包了啊,好,咱们来个UUI等于 UUid.random哎,看到这个random让我们想到什么?
15:04
随机数,那他所生成的是一个随机串啊,随机串好,我们现在把这个UUID啊给翻译成字符串啊。好,我们现在来看一看这个字符串能输出什么?好,再同时看看它是多少位的。好。来看看啊,是不是有字母,有数字,还有这个横杠啊,对不对,一共是36位了,我现在此时此刻在我这台机器所生成的这个随机串啊,一定是全世界唯一的。哎,别着急,别着急,这些东西还没玩完呢,玩完之后我再给你解释啊,不要急啊,哎,咱们还行,求知欲很很强啊,是吧?啊跟杨老师给我描述的完全不一致,看看啊,我再给你升一把啊,再升一把,咱们来看看啊,跟我上回这个随机串是不是一样的,老铁们。
16:07
好,咱们来看看啊。我再执行一下。一样吗?你其实你心里边记几位是不是跟上回肯定是不一样的,对吧,每一次生啊,他都是不一样的,OK吧,好,但是大家注意看啊,咱们这个横杠一共有几个呀。你们那五个怎么数出来的呢?一共是一二三一共是四个啊,一共是四个,每一次升大家注意啊,这个横杠的位置以及数量啊,其实都是不变的,OK吧,只有数字和字母在变化,所以说对于我们表示设计来讲的话,是不是字段的这个长度是不是能省四位,咱们就省四位啊。对吧,为什么能省四元,省四太长了,占内存太少了,不够用,是这样吗?好,咱们也不能太长,OK吧,大家注意啊,这四个啊,既然能省的话,咱们省一下,好,这就回到了我们处理字符串的阶段了,如何我把这四个杠给它干掉了说吧。
17:27
用什么对于字符串的处理?看哪个像。哎,是什么,你们说你们是不是想说string啊,啊,这string啊,是这个吗?不是吧,啊,不是这个啊。其实斯Li还挺靠谱的,点Li这个时候挺靠谱的,那这里边应该传个什么横杠做一个数组,这个数组123455个元素变立了,然后加一下就行了,对不?
18:04
可以啊,没问题啊啊,还有一种挺方便的形式啊,其实用哪种都行啊,Replace。什么意思?替换OK吧,替换啊好二什么意思。所有我现在要将所有的什么替换成什么横杠替换成什么空,这应该是一个空串吧,对不对,好,可不是n nul不是空啊。行,再来处理一下啊。试试看。那这回咱们是不是减了四位数32位了,横杠看掉了,OK吧,咱们以后啊,就用这个UID当做组件OK吧,好,那现在啊,咱们来分析两个问题啊,那刚才老师这这吹牛都吹出去了,他一定是全世界唯一的对不对?
19:06
啊,第一个小问题就是啊,他为什么是全世界唯一的啊?UUID是全世界唯一的,OK吧,好啊,第二个问题啊,在数据库表当中啊,使用这个啊什么。类型啊,这么说吧,UUID生成的主键啊,应该使用什么类型,这俩问题啊,咱们一个一个来分析一下啊,啊第一个呢,其实咱们就是做一个了解就行了,没有人去考虑这种问题,为什么UUID是全世界唯一的OK吧,构成UUID啊有三三大要素啊,前两大要素分别是什么呢?咱们的这个啊,随机数以及什么呢?时间戳啊,但是这两个东西大家想一想啊。
20:02
刚才咱们分析了,虽然概率低数有可能撞上,对不对?光有他俩不行,OK吧,其实随机数啊,就是一个辅助剂,你不用去管它,它起不到决定性的作用,OK吧,时间呢,其实是能够起到决定性的作用,但是它怕并发,是这样吧,好,那关键点就在于这第三大要素上。是什么呢?好思考一下。
我来说两句