00:01
那么我们来看上午我们呃添加的最后的两个数据库的列,这两个数据库的列呢,一个是create time,一个呢是update time,好,那这两个数据库链呢,在一些公司的开发规范当中,比如说阿里的开发规范当中,嗯,那他就明确的强调,在所有的数据库表当中呢,必须包含这两个列。啊,一个列呢,表示这个数据记录的创建时间,一个列呢表示这个数据记录的更新时间,所有的数据库表啊,嗯,你存在于我们当前的这个项目下啊,这个所有的表必须有三个列,这三个列一个列是ID列,一个列呢是创建时间列,一个列呢是更新时间列,当然这是阿里云的啊,这个阿里巴巴的开发规范,那么因为阿里巴巴的那个呃。开发规范的那个文档啊,它是一个网红的文档是不是啊,所以呢,所有的公司啊,几乎都会参考阿里的这个开发规范,所以呢,这也是一个业内的一个约定俗成的一个标准吧,那如果是这样的话呢,大家就会发现我们在呃做这个。
01:09
嗯,业务增删改的时候呀,总是要关注这两个列,比如说我们在前面我们已经做到的这个增加业务当中,你呢,需要对这两个列进行处理,那同样。如果我们做修改,比如说这有个update,我们一样呢,也要对这两个列进行处理,那其中呢,因为这是一个修改功能,所以呢,Create time我们就不用改它了,我们只修改update time就可以了啊,然后另外呢。删除就没有必要了哈,数据都没了,就不用改了,另外呢,还有一些啊,比如说后面我们这个service test。这里面的批量增加呀等等,其实呢,都要对这个列做处理啊,你如果不处理的话,那么可能就,嗯,其实设计那个列就没有意义了,所以你既然设计出来了,就要时时刻刻想着它,所以呢,我们就想,既然这个列是所有的数据库当中都有的啊,所有的数据库表当中都有的这样的一个列,能不能也让它像主键列一样有一些自动的生成策略,这样的话呢,我们就不用每一次在维护这个数据库表的这个增加呀,或者是修改的时候呀,都去主动的去维护他们了,能不能让这两个列呢去自动的更新,那当然是可以的,那么所以我们来说一下这两个列的这个自动自动更新的方式啊,首先说像这个。
02:37
时间列或者是其他一些类型的列啊,那如果你有一些呃默认的数值的话,我们完全可以在我们当前的这个数据库表,比如说age里,我就想让它默认就等于零,那你就填充一个零对不对啊,比如说username里,我就想让它默认呢,就等于一个。字符串,那你就比如说username叫做无名氏。
03:05
对吧,这个就是你默认情况下,你填完一个数据之后,只要你不给它命名,它默认的值就叫无名氏,对吧?所以这个呢,是我们在数据库当中去处理这样的一个字段啊,那如果我在数据库当中处理这个时间日期类型的字段,我怎么给它一个默认值呢?那么我们可以在这个地方,那就给他添一个具体的值就可以了,那么还有一个方式呢,就是在这个地方。啊,把它勾上叫做根据当前时间戳更新,好,那么这个update time和current time我们都把它勾上,勾上之后呢,那每一次你维护这个数据库表的时候,它都会根据当前的时间戳进行更新,但是很显然这种功能呢,只适用于我们的update time。对吧,啊,只适用于update time,那么create time呢,在然后就第一次的时候,你需要去添加,呃,其后的这个过程呢,你就不需要去修改它了,所以呢,Create time我们怎么处理呢?把它勾下去啊create time我们怎么处理在这个地方。
04:11
在这个地方我们添加一个默认值,这个默认值呢,实际上是我们买SQL当中的一个,呃,相当于关键字了,C re current,然后呢叫time time,然后是。Damp这个呢,就是。会默认的,在数据添加的时候,先呢,将当前的时间戳添加到我们的这个位置啊,那同样针对于update time。我们呢,在这个地方呢,也把current time step给它定义在这个位置,所以呢,当insert记录的时候,那么当前的时间戳呢,就会根据我们写的这样的一个关键字啊,自动的被计算出来,作为create time和update time的默认值填充到这条记录当中,那同时呢,如果你给update time再勾上这个根据当前时间从更新这样的一个选项的话,那么当我们的这条记录更新的时候,那么update time呢也会做更新,所以呢,我们总结一下啊,如果你想在添加的时候维护这个字段,针对于时间日期类型的话,那么就添加这样的一个默认值啊,他们两个我在添加的时候都要维护,那么如果你想在更新的时候去维护这个字段,那你就在这个地方勾上,所以这两个字段里面呢,我们只勾了第二个字段,好是这样的,然后这样的话呢,我们就保存一下这个。
05:37
数据库表打开完了之后呢,我们打开啊,打开之后呢,我们来看一下之前我们已经存的这个数据,已经存了好多数据了,那其中呢,这个create time和update time呢,是之前我们主动维护的,那现在呢,我们就变主动为被动,所以呢,我们这面就不维护他了。就被动的在数据库里面进行维护,那刚才我们已经配置了数据库,所以现在呢,我们再来看一下。
06:03
好。我把这个改一下。那接下来呢,我在这个地方呢,就右键。插入。好,大家看这面绿了哈,我们看结果。好,这个有没有插进去,有有没有带着啊c time和update time这两个列呀,没有是不是啊,那time和update time这两个列在数据库中有没有插进去呢?刷新一下有明白吧?啊,也就是说我们在业务层当中实际上并没有对这两个字段做操作,但是呢,呃,数据库当中这两个字段呢,却被插入进来了,那么是如何做到的呢?就是刚才我们在数据库当中对这两个字段呢做了设置啊,就是数据库级别的一个设置,那我们再来测试一下更新功能啊,那么在测试更新功能之前呢,我们先来看一下这个更新时间是刚刚我们的14:04:41,好,接下来呢,我们来看一下。
07:13
在。嗯,下面这个update吧,Update这个测试方法当中,我们把这个ID呢,给它改一下,改成我们刚刚添加的这个ID,就它复制一下。然后接下来呢,我在这个位置,诶给它粘贴一下,是不是我要把它改成什么呢?改成74行,然后接下来呢,我们来运行一下右键。好,接下来呢,我们来看啊。下面这一块。是不是就完成了一个更新啊,但是这个更新的过程当中呢,啊,我看一下啊。
08:01
这有个update time,我得把它删掉啊。这样才可以。我再改一下啊,改七七吧。好,然后接下来呢,我右键。更新。好,那么接下来呢,我们来看这个结果。好,那大家看这回的这个update语句是不是就没有什么呀,没有update time在这个里面了,那么update time有没有被更新呢?我们来看一下刷新一下哈。大家看是不是时间依然被更新了,那么就是14:06:42啊,就是我们现在的时间明白哈,所以呢这块呢,就是我们依赖于数据库的一个默认值的一个设置啊,对这个数据库表里面的这个字段呢,进行一个被动的维护,相当于也就是说在业务层呢,我们没有对它进行一个主动的处理好,那除了这种方式还没有其他的方式啊,比如说我现在呢,想做一个应用程序,我这个应用程序呢,我想就是连接各种各样的数据库,我既能连买circlele,我又能连Oracle,我还能连circleql server等等很多这样的一个数据库,我这个应用程序呢,我对各种各样类型的数据库是兼容的,那么就不能使用我们刚才的这种方式了,为什么呢?因为刚才的这种方式只适用于MYSQL。
09:29
那你在其他的数据库当中呢,就会有其他的这个不同的解决方案啊,包括Oracle呀,Circleq server呀,实际上他这面的默认值的设计方式其实都是不一样的,各不相同,这样的话呢,我们就会发现啊,当你啊去应用新的这个数据库啊,这个服务器的时候呢,我们就需要记着在数据库服务器那面呢,还要去根据呃这个我们的需求去应用不同的数据库的策略,去把这个功能给它实现了,所以说对我们来说呢,就增加了数据库这面移植的一个工作量啊,那我们能不能做到呃这样的一个功能呢,就是数据库这面不设置。
10:09
数据库,数据库这边还是和之前一样,就是保持这种。默认的一个状态。好。然后呢,在业务层当中进行设置,而且业务层当中呢,我们还不想去主动的去在业务层当中去处理,因为太麻烦了,每个表都有这两个字段,每一次增增加和修改都要维护他们,所以我们就想想一个办法,就是能够自动填充这两个字段,这个呢,也就是我们将要讲的自动填充功能。
我来说两句