00:00
好,第四个例子是这样的,它稍微复杂一点,然后呢,他的需求呢,是查询名字中包含N,并且注意后面呢有一个括号,也就是说后面的这个条件呢,是优先级比较高的啊,然后和前面的这个。进行一个,呃,这个与运算的时候呢,我们要先计算后面括号部分的。里面的这两个条件,那并且什么呢?年龄小于18或email为空的用户啊,然后并将这些用户的年龄再改为18啊,注意啊,就是我们要查的用户是什么呢?他这个我们写的这个例子没有任何业务意义啊,就完全是为了去啊就是。学习咱们的这些query rapper啊,所以大家就看看这个逻辑非常这个别扭哈,好,那所以我们还是再来,嗯,认真的读一下,第一个呢,就是必须是年龄小于18或以email为空,这两个条件满足之一就可以,然后呢,只要满足之一的话呢,我们就查询名字当中包含N的啊,把这一类的用户拿到,拿到之后干嘛呢?我们要将这一类的用户进行一个修改,注意是修改,修改什么呢?把这些用户年龄小于18的,所有的用户都给他改成18岁啊,然后呢,我们把这个email为空的用户的,呃,Email地址呢,都给他加上一个email,也就是说如果这个我们的用户当中有不符合条件的用户,我们都让他强行的符合条件,是不是都改成18,然后加个邮箱啊好,然后呢,我们来看一下这怎么做。
01:46
Test。Public。Wide test4。好,然后呢,我把这个需求呢,先写到这。
02:04
然后接下来呢,我们先来创建一个query wrapper。同样啊,大家注意。我们前面了解到呢,有两个。有两个,一个是query rapper,一个是update wrapper,有很多同学他会有一个误解,误解什么呢?说我要修改的时候,我组装查询条件,我就我就得用update wrapper。我要查询的时候,我组装查询条件,我要用query,不是这样的。不是这样的,注意啊,我说的是不是这样的啊,实际情况是什么样的呢?Update rapper什么时候用,我们后面再说,一会儿再说,现在还没轮到它使用它的时候呢,只要是你要想把这个语句啊,组装到where后面,或者是什么order by后面,对吧?啊,我们都用什么呀,都用query rapper。明白吧,啊,因为这个是和查询相关的这样的一个操作,同样你修改的时候,你是不是得先查出来你要修改的这些东西有啥,就是这个记录啊,根据条件先把要修改的查出来,你要修改的是这一类的记录,对不对?所以我们组装的这个circle呢,只要是放在V后面的,或者是order by后面的,那么我们都用query rapper啊。
03:20
好,然后呢,所以呢,在这个地方。我们呢,就先去,呃,这个创建一个query rapper。啊,这创建好了,好,然后接下来呢,我们呢来组装条件,组装的条件是什么呢?先看一下查询条件是什么啊,这个是修改的条件,这个是查询的条件,所以呢我们来看查询条件名字中包含N,所以呢这边就是query rapper。第二。Like。N对吧?啊,这是名字中包含N啊,并且呢,前面我们还要有一个参数啊,叫username。
04:03
Username,好,这样的话我们就写好了,诶怎么回事?好,那这个是第一个条件。第二个条件呢,是且。年龄小于18。且年龄小于18,我们可以就是,比如说年龄小于18呢,就是。嗯,Less than吧啊这个是年龄,然后呢,嗯,年龄是age是吧,然后接下来呢,就是18好,然后或或呢,实际上是一个二啊。就是点二这个是或,然后接下来呢,或什么呢,或以为空,所以呢这块呢,就是以M以ma为空,以ma为空的话,我们呢,实际上应该是就是那个is none。这个是以email为空,明白吧,但是实际上大家会发现写到这的时候就感觉好像有点写不下去了,这个应该怎么写呢?写到这啊,点is now。
05:04
然后所以这块呢,就是email。为控。啊,但是实际上根据我们的这个经验呢,我们知道如果你这样写的话,它的优先级先算这个,因为你中间如果不加二的话,它就是and的,所以呢,它的优先级是先算and,然后呢,他俩的结果完了之后再算这个,现在我们想什么呀,我们想让这个的表达式呢,优先级比较高,也就是说先计算H小于18或。Email。这个呃为空对吧,我们想先算这样的一个这个表达式,然后再后来呢,再跟这个like去结合,所以那你这样怎么做,嗯,我们就不能在这加括号了。他没有这个语法,是不是我们把这加个括号,那不不能这么写啊,那不能这么写怎么办呢?我们可以借助我们之前学过的那个。呃,这样的一个语法这样写啊,就是后面的这两个,我不是想和它用and连起来吗?啊,那然后你在这个地方呢,就写一个and,明白吧,好,写and之后呢,你会发现这个里面它可以接受什么呀,可以接受拉。
06:15
啊可以接受lada,所以呢,在这个地方呢,我按里面我写什么呀,我写这个。把它写到and里面去,那么and里面怎么写呢?用lamda的形式写,用lamda的形式怎么写呢?你不能直接这样写,这样写的话呢,这个东西它应该是被query rapper主教对象调所调用的啊,但是这个语法很显然不符合要求,那我们怎么办?我们呢,在这个地方呢,它既然是可以接收这个lamada的,我们呢就可以用。这个I来表示这个主叫对象啊,写一个匿名函数,然后箭头。然后呢,匿名函数里面呢,就是我们的LT啊,那么LT被谁调用呢?被这个I调用,所以这个I呢,实际上是我们的主教。
07:06
啊,它代替了谁呢?它代替了query rapper,它其实就是一个query rapper的提升,相当于那这样的话呢,我们就完成了这么一个表达式的编写啊,所以呢,在后面这个地方,如果你想表示一个呃,逻辑优先级比较高的这么一个查询的话,那么建议大家呢,把它放在and里面啊,去做什么呀,去做一个lamda。啊,去做一个拉姆达,然后在拉姆达的这个具体的方法的实现当中,我们把需要优先级提高的这个表达式呢,写到后面,当然了用I表示query rapper的一个对象的一个提升,啊好,那么这样的话呢,我们的这个条件表达式呢,就写好了,写好了之后呢,接下来我们要做的其实呢,是一个更新的功能。啊,所以要做更新的话呢,其实我们要更新什么,我们要知道我们要更新的内容呢,我们把它封装到user对象里。
08:04
好,然后呢,u.s。Set age。嗯,我们要将他们的这个年龄呢,都改为18岁,所以这边呢是18,然后再接下来user.site site email,我们要将他们的email呢都改成。这个值。是吧,所以这个呢,是我们组装的一个查询条件啊,这个这个要更新的对象的的更新条件,所以这块呢,是我这样写一下组装查询条件。查询。条件,然后这块呢,是我们组装更新条件。组装更新条件,我们的目前为止用的这种方法呢,就是把它组装到这个user对象里,然后接下来呢执行更新。好,那么这个执行更新呢,我们就user map,然后点。
09:04
Query rapper啊?User点。嗯。Update。Update。Update就是后面这个,然后呢,User,然后根据什么来update呢?根据咱们前面的查询条件来update。啊,我要查询这些记录,然后把这个查询出来的记录呢,按照这个里面所组装的条件进行更新。啊,是这样一个意思,然后接下来呢,我们。得到一个result,好,接下来呢,我们就system out啊,然后result啊,所以呢,现在我们其实对这个具体更新了哪条记录我们不关心啊,我们只是看一下最终的。组装出来的SQL语句啊,如果满足我们的要求就行了,好,然后右键运行。因为数据库中的记录太多了哈,我们就不去。不去分析了,就看SQ语句。
10:03
好,然后接下来呢,我们来看生成的这个circle。是不是满足我们的要求的,大家看这面是不是update呀,首先然后呢,更新这样的一些啊数据字段啊,那这些数据字段呢,除了我们自己主动更新的age和email之外,是不是还有它的自动填充的一个update time的一个更新,好然后接下来呢,就是查询,也是首先呢先逻辑查询啊,查询出未被删除的记录,然后接下来呢,再组装查询条件,这个查询条件呢,组装到后面的这个部分,首先第一个就是username,我们来做了一个模糊查询,然后and and后面后面这一块是刚才我们写到那个lada里面的啊,它的优先级比较高,所以呢,自动为我们添加了一个原括号,那么就是A值小于这个值,2EMAIL is now对吧?所以呢,这样的话呢,就是我们整个的这样的一个查询的,呃呃SQL语句,呃,根据查询条件来更新数据的这么一个SQL语句呢,呃,稍微复杂一点的这个SQL语句呢,咱们就。
11:07
组装完成了,好,那这是我们的第四个例子啊。
我来说两句