00:00
好,那接下来呢,我们来看一看最后一个注解叫做table logic,这个table logic这个注解有什么作用呢?叫逻辑删除啊,它是逻辑表,逻辑表其实呢,它主要指的就是删除这个功能,我们来说一下什么叫做逻辑删除,大家那个啊,电脑上都有删除功能,删完了之后,那个文件它默认情况下是给你放到回收站里的,你还能给它还原回来是不是?所以说这种其实就是没有真正的在你的磁盘当中把这个文件进行物理删除,只是做了一个标记,这个标记呢,就把它那个放到回收站了啊,文件还在啊,所以这个其实就是一个典型的逻辑删除,那么所以在我们的应用程序当中呢,经常情况下,我们也会对我们的数据呀,有这样的一个要求,就是有一些数据它比较重要啊,删完了之后,万一你说你误删了还找不回来了,这个呢,就。呃,就就比较严重了,后果就比较严重了,是不是啊,所以呢,我们希望这个数据能找回来,那我们就将这个数据呢,设计成逻辑删除的啊,那所以设计成这个逻辑删除啊,我们有这样的几个步骤,第一给这个数据库当中啊的数据库表呢,设计一个字段叫逻辑删除字段,那一般情况下在阿里。
01:21
八八的这个开发规范当中啊,他要求或者是说他建议我们所有代表这个逻辑啊属性的,或者是说带有这个真假啊这样的一个业务,呃,这个逻辑的这样的一个字段呢,都加上一个is前缀叫is delete叫是否被删掉了,那当然这个删指的是逻辑删啊,如果被删掉了的话,那么我们呢,就让它的这个值呢等于一,如果没被删掉的话,那么我们就让它的值呢等于零啊所以呢,我们在数据库当中加这么一个字段。在我们的这个to这个表中,我们加上一个叫做is delay,好,然后一般情况下我们呢,让它是一个bur Bo Le,好,然后这块呢,我们就是逻辑删除标识好,然后呢,我们来保存一下,大家看啊,当我们保存的一瞬间呢,发生了一件事情,就是刚才我们这块写的是布尔,但是呢,它给我变成什么了,变成tiny int了,也就是说在my circle当中没有真正的布尔值。
02:31
在买circle的底层,它实际上是没有真正的布尔类型的,它是用t in,然后长度为一的t int表示布尔。这个大家要知道啊,但是对于我们来说,这就是波尔了,好吧,那接下来呢。我们呢,呃,下一个步骤就是需要在我们的实体类当中去添加这个delay的字段,所以呢,我们找到我们的实体类。打开,然后呢,找到user,在这个里面呢,我们添加一个private啊,然后呢,因为在我们的数据库当中啊,他买circleq的底层确实是他没有波尔,所以呢,他最终是用呃,这个tiny int表示的是吧,所以这面呢,我们其实是用用integer。
03:19
In in表示也可以delete it,我们呢,用布尔表示也可以,这两种方式都可以。啊,都可以,然后有同学会说你那面叫is deleted呀,你这边应该写is delete it呀,它就会做自动映射了,是的,如果我们这边写is deleted的话呢,他那面呢,就会做这个自动映射,但是在阿里巴巴的数据库开发规范当中,它要求如果是布尔属性的话,那么不建议把A前缀带过来,把A前缀去掉,写成D。
04:01
的这样的一个形式啊,也就是说阿里的规范当中,它相对应的啊,有这样的一个说明,数据库当中我们要这样设计,必须加is前缀啊,然后对应实体类当中的属性,我们要这样设计,把is前缀去掉,这是它的规范啊,为什么会有这样的一个规范呢?因为某一些框架啊,他在去读带A前缀的这个属性的时候,它会产生一些歧义,所以避免这样的一些歧义的话,一般情况下我们在啊为我们的。实体定义属性的时候,尽量不要加这种A前缀,加上A前缀有的时候会出现一些你就是莫名其妙的问题啊,好,然后所以呢,数据库我们按规范是这样设计的,那实体类我们按规范是这样设计的,那这就意味着这种情况我们就得加一个table field这个注解先呢,把它的这个名字给它做一个映射,叫is下划线。
05:01
明白吧,啊,这虽然麻烦,但是我们最好是这样做一下,因为就符合开发规范嘛,那有同学说我就觉得麻烦,我就不想这样写,然后我这面就就这样写,有没有问题,没问题啊,业务当中没有任何语法问题,也没有任何功能上的这个问题,只不过就是没符合规范而已,所以建议大家呢,符合规范的话,我们就这样写。好,然后这面呢,我们还是把它放开对吧,做一个映射啊好,那这块呢,就是我们先把这个字段定义好了,定义好了之后呢,我们就要将这个字段呢,变成一个逻辑删除字段,好怎么做在这个位置。啊,给它设置成table logic,写这样的一个注解就可以了,明白哈,然后下面这块呢,你是写布尔也行,你是写引起格也行,都可以啊都可以好,那接下来呢,我们在。
06:00
我们的这个项目当中呢,做一个测试吧,比如说我想删除。删谁呢?我们看一下数据库当中的。数据吧,比如说我想删除ID啊。为二的。这个记录好,那接下来呢,我就执行一下这样的一个删除map test,我们找到之前我们写的删除方法。啊,那我们把ID为二的这个记录呢,给它删掉好,然后接下来呢,我运行一下。好,接下来呢,大家先看这个色啊。这大家看是不是这是一个update语句啊。它并不是一个delete语句了,注意我们刚才执行的是一个delete测试啊好,然后接下来呢,在这个地方它并没有执行delete,它执行的是update,那么在这个update当中呢,它先对我们数据库当中的所有ID。
07:11
也就是说is deleted ID为零的记录进行了查找,那当然我们指定了它的UID的值,那么他就查找UID等于二,并且is delete等于零,什么意思,就是没有被删除的,因为我们说我们定义如果这个字段的属性为零的话,就是没被删,然后把这个找出来之后,把它设置为一,这样的话呢,我们就把它删掉了,那么当然在数据库当中,我们现在来看这个结果的话呢,就不太对,为什么?因为我们没有给它设置为零,你得先让它等于零,也就是说这里面的这个is deleted呀,我们要有一个默认值的,明白吧,啊,所以说你得把这个默认值给它设置上,这样的话呢,我们的这个逻辑删除的这个结论呢,才能成立啊,这个课下大家自己去设置,或者是你写个update语句,把它统一update一下就可以了,然后呢。
08:08
我。我们来看一下,现在我们在对它执行一个这个逻辑删除啊,那么还是执行刚才的这段代码。这样吧,我先执行这个update语句,在哪执行啊,在这执行。啊,新建查询。然后接下来呢。Update to site is deleted等于零,是不是先都给它设置成零啊,你这样设置一下。那你看全变成零了,然后接下来呢,我再执行刚才的这个删除。在这个地方右键。删除。好,接下来呢,我们来看后面。大家看这回更新了一条记录啊,然后搜QL语句还是刚才那个没有变,那我们来看一下数据库当中。
09:04
我能把这个刷新一下。大家看这面是不是变成一了,就说明呢,ID为二的这条记录呢?Jack被删掉了。啊,你说删掉就删掉啊,怎么证明呢,除了这块变成一之外,我们再来执行一下其他的功能,比如说在这个地方。我们执行一下昨天咱们写的第一个。查询所有的记录。怎么来执行右键?好,接下来呢,往后。看一看circle啊,主要看circle。Circle在这,大家看这个circle。看后面。是不是有一个where is deleted等于零啊?也就是说,当我们为我们的数据字段添加了一个逻辑删除注解之后,它不但对我们的删除功能产生了影响,还对我们的查询功能也产生了影响,那么查询的时候,它会自动的在我们的查询条件后面追加一个叫做is deleteate等于零的一个附加条件,那么说明我要查的是所有没被删除的记录,明白哈,所以呢,大家来看最后的这个结果,是不是ID等于二的那条记录并没有被查询出来,我们查询出来的总记录数是33,而数据库当中实际的总记录数。
10:39
其实是34条是吧,这呢能看见吧,啊,数据库当中实际的总记录数是34条啊,但是我们查询出来的总记录数是33,因为它在查询的过程当中并没有包含这个ID is。Delete等于一的这样的一个值啊好,那所以这个呢,就是我们所说的逻辑删除功能。
11:06
那么逻辑删除功能呢,还有一个需要说明的地方,但是不重要啊,因为这个呃,特性呢,我们通常情况下会使用它的默认值,什么样的一个特性呢,就是默认。他的。值在数据库里面。零的时候就表示没删,一的时候就表示删了。明白吧,啊,零表示没删,一表示删了,那如果在数据库当中。我们用的是T1啊,然后在我们的。实体类当中我们用的是布尔的话,那么零就表示什么呀。零就表示false。删了吗?没删false对不对啊,一表示什么呀?处deleted删了吗?删了明白吧?啊所以这块呢,零表示false,一表示处啊,False代表未删除,一代表。
12:11
这呢啊,代表乙。已删除。已删除,明白吧?啊,所以这是这样的两个值啊,这样两个值好,那么一般情况下我们都会这么用。啊,假设说。我们的数据库设计者呢,就是比较。比较与众不同啊,好,那么它呢,就设计了这样的一个值。我把它复制一下。这样啊,还是table logic,然后这面呢,它用的是integer。In。好,然后接下来呢,也是delete it。好,然后接下来呢,他就想让它是负一。
13:02
哎,我想一下,比如说一表示。未删除。行吧,然后负一。我就是这样设计的呀。表示已删除。明不明白,数据库先设计好了。我数据库设计工程师和咱们开发团队不是一不是一套班子,是不是人家数据库已经先设计好了,好人家设计完了之后就一是未删除负一是已删除,你怎么办?那根据我们当前的这个业务的话,那就乱套了,因为我们默认情况下它就是零,在in t的情况下啊,正常情况应该是零是未删除,一是已删除,然后你现在非要这样,那也有办法怎么办呢?添加一个配置在哪配呢?在配置文件当中配配什么呢?配这个啊。配这个就可以了。哎,我看一下啊。测试。
14:01
啊,这个笔记当中没写啊,我们看那个啥吧,看看这个文档吧。有一个叫逻辑删除。因为不经常用这个功能,所以笔记当中呢就没写。大家了解一下就可以。逻辑删除啊。点进去。好,然后呢,我们来看。我们就配这个。就行了。就配这个。明白吧,啊,这个它是用email格式的啊,那你如果把它转换成那个properties格式的话呢,我给你转一下这块。好,这边写mail。我我转一下。好,他就给我转成这个properties了,我把它粘过来。
15:02
写到配置文件当中。好,大家看叫什么叫做logic deleted啊,然后field,我们这个叫做logic deleted field我们还是delete啊,当然了,呃,Deleted是吧,我看一下是不是我把它复制过来,对啊。当然了,是不是这就说明你这个逻辑删除的默认字段的名字,你也可以自己随便定义啊嗯,好,然后接下来呢,这个呢就是值,这个呢叫做已经被删掉的值,我就定义成负一,这个呢是没被删掉的值我就定义成义,这样的话呢,你这个值就可以这样定义了啊,所以数据库当中呢,你就可以设置,就是如果没删掉,那全是一对吧,如果删了那就把它设置成负一,明白哈,但是这种场景啊,就是不是经常用啊呃,我们平时开发的时候用的还是刚才我们讲的那种默认情况,所以这块大家了解一下就可以了,有兴趣的同学可以自己回头试验一下好吧,嗯,所以方法我已经也告诉大家了啊,就是通过这样的一个设置,包括这个字段的名字都可以进行一个更改好了,那么这块呢,就是针对于逻辑删除这这个功能的一个完整的说明了。
16:24
那我呢,在这个位置。先把它还原回来啊。要不乱套了。行吧,啊,还原回来。
我来说两句