00:00
那么A这个字段呢,我也想给他在业务层做一个自动填充。那么如何进行填充呢?在这个位置。我想填充这个age啊,有this。点site。哎,Strict啊,In insert,然后是might object。啊,然后填谁呢,就填刚才我们说的这个age。Age,然后接下来这个age是嗯什么样的一个数据类型,那我来看一下啊。Edge呢是integer是吧,所以呢,我这块就写integer.class好,然后接下来呢,我们在这个后面我给它附一个值,比如说我就像默认值那是三。三岁啊万十三岁,那我们来看一下,如果对当前的一个用户啊,我们不填充他的年龄的话。
01:04
这个位置吧,比如说200我们不写。然后呢,我来做一个自动填充。右键。右键。好,填充完毕,我们来看一下生成的SQL语句。SQ语句等一下啊,它怎么是200。啊对,观海200哈。观海200。然后呢?这个地方有username,有email free time,没有update time是不是少一步吧,是不是为什么没有年龄啊,是不是因为在年龄上我们还要填什么呀,是不是还要填这样一个注解啊啊,所以这个注解不要忘了两个步骤啊,添注解啊,然后填这个自动填充好,那我们再来执行一下,所以呢,任何一个步骤呢,都是不能省略掉的,诶这呢。
02:08
右键。好,然后接下来呢,我们还是看这面他的思口语句,你看这是不是。叫做嗯。三岁呀,对吧,这是我们刚才做的自动填充啊,那这个其实很简单啊,这块我们先来看一下这个结果吧。13岁是不是好。那针对年龄我们。意思呢,就是如果你不设置年龄的话。我就给你自动填充一个三,但是如果我有年龄,我想主动设置年龄的话,那么在当前咱们的这个应用程序的啊,这样的一个业务逻辑的一个前提下,它会是一个什么样的效果呢?我们来看一下,我们再把这个setage呢给它放开。
03:04
放开了啊,然后我这面呢写300。接下来呢,我来运行。大家看一下。它的结果是什么?是300对吧。那问题来了。这个方法有没有被执行?就是这个方法有没有被执行。我们来看一下啊。先看一下数据库的结果。确实是300啊,然后呢,我们在这个地方还是添加一个。注解啊,呃,这个这个语句啊,来做一下它的这个输出叫做insert age属性。
04:05
首先我们先得到一个结论啊,就是逻辑没问题对吧?如果我们在这个地方不设置年龄,那么他就会使用我们自动填充的这个年龄,如果我们在这个地方设置了年龄,那么他就会用我们设置的这个年龄,但是关键是这句话。它是执行了还是没执行,呃,是需要我们来看一下的,所以呢,我们在这个地方呢,添加一个insert edge属性好,然后接下来呢,在这个里面。呃,在在这个里面,我们呢,再来去给它运行一下,我们给它改成400。
05:02
在这个地方呢,我们会发现这个400呢被填充了。啊,就是被我们自己主动填充了,对不对,然后接下来呢,再往上。我看一下日志输出那块啊,在什么地方。搜一下这个日志。好在这呢。不太好找啊,有点多,那这块是不是就是我们的insert a属性这句话,也就是说这句话是不是依然被执行了,只不过它里面内部他做了一个啊校验啊,他要判断出来我们当前的这个对象里面呢,已经有了这个A属性了,所以呢,你自己给他填充的这个三呢,实际上在这个内部呢,就没有被填充进去,但是实际上呢,我们其实是可以避免他被执行的,也就是说我们提前判断判断,如果当前的这个对象里面的A值属性。
06:08
如果是none的话,就没有值的话,我们再来执行这句话,如果当前的这个对象里面的age属性已经有了,其实你就没有必要去多此一举去执行这句话了,执行一遍也不好使,对不对?所以呢,我们可以在这个地方呢做一个优化,就是判断age是否赋值啊,怎么判断呢,叫this.get。Field。Value by name。根据。我们的属性的名字,把当前的这个属性的值给它取出来,那么我们就age。取age属性的这样的一个值从哪取呢?从这个Meta object里面取好,这里面呢,包含当前的这个对象里面的age属性的值的一个原数据信息,所以通过这种方式呢,我们可以把age取出来,当然这个age实际上呢,它是一个隐几个类型的,但是其实没有必要去转换了,为什么我们直接判断它是不是none就行了,If。
07:09
Age如果等于none的话,就说明我们在业务层呢,没有对这个age值进行赋值,那么如果业务层我们没赋值,我们就使用我们自动填充的这个内容,如果业务层我们赋值了,我们就不去不去执行我们的自动填充的内容,理解哈,好,那接下来呢,我们再来看一下。这个呢,是我们业务层的赋值了啊。赋值了就不执行自动填充了,对不对,嗯。还是400哈,嗯。好看一下啊,我们业务层呢,已经复职了。然后嗯,这个地方呢,就是400,那我们自动填充那一块。是不是除了这一句话之外,没有其他的这个日志被输出出来呀,啊,所以呢,就。
08:04
没有去执行。我们的自动填充好,那这个是业务层赋值的情况下,那业务层如果不赋值呢,把它删掉。再来。再来运行。好,我们来再往后看啊。业务层没有复制。然后执行了自动填充。对吧,填充为三岁了啊,所以说这种情况呢,我们可以做这样的一个优化处理。啊,所以说这个是我们优化的第二个场景。好,那么我们简单总结一下,我们刚才讲了优化的两个场景,第一个场景呢,就是当前有没有它。对不对判断。当前对象的自动填充属性。
09:07
是否?包含。当前属性这是第一个啊,然后第二个。判断。当前。对象的。自动。填充。属性是否?是否已经?负进行了赋值。这样的两个优化啊,这样两个优化,所以呢啊,其实从这个里面我们也可以得到一个结论啊,就是啊,如果这个东西特别个性化的话,就针对其中的呃,一个对象里面的其中一个不是特别通用的属性来做自动填充的话,那其实我们最好不要在自动填充里面做这件事情,因为反而让我们的应用程序的复杂度提高了。
10:08
那么实际上呢,你其实直接可以在业务层当中去填就行了,你要想填你就填,你要不想填你就写默认值,在这个地方写。明白吧,啊,什么时候我们要选这个自动填充呢?就是这样的一个字段呀,在所有的数据库表当中几乎都存在的时候,那我们呢,就把这个作为我们公共的自动填充的字段,所以说并不是说只要这个呃,数据对象当中有一个列项自动填充,我就写到这,这个其实并不是特别好的一个方案啊,当然了,你整个数据库表的数量如果特别少的话,比如说你是一个小项目,就是三五张表,那我们完全可以把所有的可以自动填充的功能都写在这,这也一目了然,但是如果我们数据啊库的这个表特别庞大,数据库的业务特别复杂,那还是建议大家。
11:03
啊,就是把一些比较个性化的填充功能,还是写到我们的业务层当中,在业务层当中咱们宁可麻烦一点,也不要在这个地方把代码全都堆到一块啊,其实呢,耦合性太大了,明不明白,但是呢,如果是写到一起的话,我们是有这样的一个优化方案的,所以说真正在写我们项目的时候呢,大家根据我们已经学的这个知识点哈,还是需要灵活的掌握的啊好,这个是我们所说的自动填充这一块。
我来说两句