00:00
好,那我们刚才呢,咱们是讲了choose when,还有otherwise这三个标签,然后下面呢,大家来看咱们的第五个标签啊,然后咱们要讲的是for each。那风一气呢,咱们从名字上咱们就知道,它主要是来进行循环的。那比如说呢,然后我们在这个之前,咱们在学习circle语句的时候,对吧,或者说我们在学习这个my be,执行特殊的circle的时候,我们是不是说过这个批量删除,然后还有呢,就是咱们的批量添加,大家应该也学过,是不是啊,那这个时候如果我们当前咱们从浏览器所获取到的数据是一个数组,或者说是一个集合,那这个时候呢,那我们是不是就需要对这个数组或集合进行循环,然后来实现我们当前的一些功能?就比如说呢,大家来想咱们的批量删除。批量删除的话,如果我们从浏览器中所获取的是一个数组,是一个ID所组成的数组的话,大家来看一逗号二,然后逗号三,那我们现在咱们来获取的这三个数据,这三个ID我们要想通过它来实现一个批量删除,那我们是不是应该是怎么写呀?是不是来循环数组,然后来获取数组中的每一个数据,如果我们用的是while ID in这种方式的话。
01:24
那我们是不是只需要把每一个ID获取到中间,用逗号进行拼接?然后呢,把它放在小括号中,就可以实现批量删除,对不对?好,那如果我们当前咱们用的是well。然后等于一,然后OID等于二,这种方式的话,那我们是不是应该来获取每一个ID,然后把我们的ID等于几放到我们的循环体中,是不是就可以,然后中间用什么来分隔哦,来进行分隔就行了,好,当然呢,大家也学习过批量添加,那什么叫批量添加我们的insert into,然后表明values,一个小括号表示我们添加的一条数据,中间咱们用逗号分隔,有几个小括号,咱们是不是就能添加几条数据啊对不对,大家注意,那所以说我们下面咱们就通过我们的数组以及咱们的集合来实现一下咱们的批量删除以及批量添加的功能,就比如说呢,咱们先来实现咱们的批量删除啊,来大家看。
02:31
好,比如说我们现在呢,咱们通过数组来实现批量删除,通过集合来实现批量添加来。大家看一下啊,然后咱们先把功能写出来,然后是通过数组来实现批量删除。通实现批量删除,OK,行,然后它的返回值的话,那肯定是int类型对吧?好,然后呢,咱们的方法名就叫做delete more,然后by a叫做by array,好,然后这样的话,咱们就可以传进去一个数组了,比如说这个数组是inte类型,或者说你写int类型也是可以的啊,In类型的数组叫做ID,叫做e ids OK吧,好啊,行,那我们现在咱们传过去的就是一个数组的,那我们在我们的映射文件中该如何去访问到这个数组呢?咱们先看一下啊,首先把它复制一下,放到我们当前咱们的映射文件中。
03:35
好,这是一个删除操作,所以说呢,用的是delete标签。好,然后咱们的the后语句delete from t_EP然后while e,比如说咱们先用这种方式来写啊,Well eadin这种方式,然后这个时候大家来想一下,那我们是不是下面就要对咱们的数组进行循环了,对不对?那咱们来进行循环呢?首先咱们需要用到的标签叫做for,一起connection这个属性来写的是我们的当前要循环的数组或集合。
04:12
那我们要来循环的是不是应该是一个数组,那我们在这应该怎么来访问到这个数组呢?怎么来获取这个数组呢?大家注意,那我们现在应该是按照我们一般的习惯来说的话,那在这儿是不是应该有一个参数名,虽然说咱们咱们也说过,我们在我们的这个买杯中呢,我们的这个映射文件在获取咱们的map接口中方法的参数的时候,跟名字没有关系,它只跟值有关系,但是呢,咱们也不知道该怎么获取啊。是不是好,然后这个时候呢,咱们只能用e ids啊。啊,这个时候咱们只能用这个e ids,那咱们先来看对不对,因为如果它不对的话,它是不是就会给我们提示呀,告诉我们我们应该用什么,这个大家注意啊。
05:01
好,然后再往下的话,咱们在这还有一个属性叫做item,那什么叫item item表示的是我们当前数组中的每一个元素,就比如说叫ead,这个E表示的就是数组中的每一个元素,那我们现在咱们只需要干什么?大家说写一个小括号,大家看好啊,在这儿来写一个小括号,然后把咱们的for一起的这个标签呢,然后给它放到这个小括号里面,因为我们现在要来实现的是小括号中来写的是每一个ID,中间用逗号分格,那所以说咱们在这是不是只需要来获取咱们的这个ID就行了,EID就行了,那现在这个EID是由谁来表示的,是由我们的item属性的值来表示的,那所以说咱们要想获取,那就两种方式,你要么用井号大括号,要么用多大括号,所以说在这大家看好,咱们可以这样去写EID,但是咱们用这种方式来实现批量删除的话,那咱们的。
06:01
Ad中间是不是要用逗号进行分隔呀,对不对?那大家想想这个逗号你怎么写,你能写到这儿吗?你写到这循环结束之后,最后就多了一个,那它不对,那咱们能不能把它给写到前面呢?你写到前面,那前面就多了一个,那这个时候怎么办?大家注意,有的老师我可以判断对不对,当然呢,没有必要,因为在我们的for each标签中为我们提供了一个属性叫separateator,什么意思?分隔符,也就是我们当前所循环的每一次的循环体中间的分隔符,那咱们现在的循环体不就是ID吗?那ID中间用什么分隔?逗号风格就完事了,这个大家注意啊好,那我们现在呢,咱们的SQ句就写完了,那我们就可以来测试一下咱们的这个功能啊,来复制。粘贴对吧,这个叫做test delete delete delete more delete more,然后by read啊数组好,然后下面的话,咱们是不是应该是通过map来调用咱们的这个方法,比如说这里面咱们就写一个new in tIgEr,然后一个大括号,然后来直接给它赋值,那我们在这里面添加几条咱们的测试数据啊,比如说aaaa。
07:22
然后AA行啊好,就这样,那我们现在咱们来删除678这三条数据,大家看好怎么写啊,六逗号七逗号八,那我们当前数组中是不是就有了这三个ID,然后它的返回值叫做result,然后咱们可以来输出一下,大家来看啊好,那这个时候它对不对呢?大家注意它不对,因为我们在获取参数值的两种方式的时候,各种情况的时候,咱们就说了,然后其实我们来传输过来一个数组,或者说传输过来一个集合的时候,其实也算是两种特殊情况了。
08:02
为什么呢?因为它有固定的访问方式,并不是说你想用什么就你想用什么都可以来访问到这个数据的,比如说我们现在咱们用的是咱们的参数名,但是咱们的参数名能访问到他吗?来大家看我现在来啊。执行错了啊。行,然后下面大家来看,那我们现在呢,咱们来执行一下我们的这个方法,大家会发现。来大家看一下他是不是直接报错了,为啥他告诉我们,我们当前咱们的参数名eds没有找到啊对不对,然后我们可以用的是谁,咱们可以用的是A和ARG0。那所以说大家想想,当我们传输过来一个数组的时候,那我们当前咱们数组这个参数的访问是不是应该也是固定的,因为咱们的my be体会将它放在一个map集合里面,以A为键,数组为持,以ARG0为键,以数组为持。
09:01
所以说大家看一下,那我们是不是就要按照我们my be所规定的方式来访问了,当然呢,大家想,那既然my be是不是会把它放在map中,那咱们是不是也可以通过谁呀?通过我们当前咱们的命名参数a per来规定一下我们当前的访问方式,大家看可不可以,为什么它报错,因为我们并不知道你传输过去一个数组my be会自动把它放在map中,对不对,对吧?好,然后所以说咱们在这儿只要加上a per,是不是就可以按照我们所规定的方式来进行访问了,是不是啊,好,大家来看啊,现在我们再来一个执行,大家看一下。好,大家看有问题没有,没有问题,现在咱们当这个功能是不是就可以实现了,来大家看好,我现在再来一个刷新678还有没有了,没有了,所以说呢,大家注意,那所以我们现在呢,就我经常跟大家说,我说我们在获取参数值的两种方式的时候,对不对,然后我们的这这么多的情况,咱们原来讲了五种情况,现在咱们还要加上数组和集合,这一共是七种情况,那这个时候我们怎么办?所以说我建议大家就把它最终归结为两种情况就行,一种是实体类对象的情况,或者说map集合的情况,还有一种呢,就是如果你不知道该怎么访问,那你加上a per,你就一定知道他该如何访问了。
10:30
所以说我也建议大家,除了咱们的实体类对象和map集合的这种情况,其他的方式大家都自己手动加上a per就可以来,就可以以我们当前指定的方式来访问到这个参数了,这个大家注意啊。好,OK,那我们下面呢,咱们再来看,那这里面咱们除了有这三个属性之外,我们这里面其实还有一个叫叫close,还有咱们的open,那什么叫open open来表示的是我们当前所循环的内容以什么开始,以什么结束,那我们当前咱们所循环的整个内容是不是都要以左括号开始,然后要以右括号结束。
11:14
那所以说我们现在咱们连小括号都不用写,直接来使用谁呀,直接来使用咱们的open和close就可以了。这个大家注意来,我们现在咱们再来一个执行,大家看啊。好,大家看一下这有问题没有啊。是不是没有任何问题啊,虽然说我们当前咱们的678这三条数据已经删过了。那我们主要来看的不就是咱们所输出的这个circle有没有问题吗?对不对,这大家一定要看好啊,行,那我们现在咱们的第一种批量删除的circle咱们就写完了,那大家注意,我把它给注释掉,然后咱们再来写一种,因为咱们说过批量删除的话,咱们应该是有两种写法的,咱们还有一种是while ID等于一,OID等于二这种方式,来大家看一下啊,好,Delete from t_emp。
12:11
然后well ead等于1OR ead等于二,那所以大家来想,那我现在我就需要干什么,我现在我的for一体的循环体是不是就变成了ID等于谁对不对?然后中间用什么分隔O进行分隔,所以说咱们现在要来来大家看一下啊,我们当前咱们要来访问的数组叫e ids,哎,大家注意啊,在这我复制一下,因为我们在map接口的方法中来加上了命名参数,那所以说我们当前来访问咱们的这一个数组用的就是e ids对不对?好,Item表示数组中的每一个数据,然后还有open和close这俩咱们是不是就不用了,咱们的循环体应该是ead等于井号大括号ead,那咱们循环一次,那我们当前是不是就有了一个EID等于1O啊,Eadd等于二,Ead等于三,那我们的每一个条件中间是不是应该用O?
13:11
才能来实现批量删除,那所以说在这咱们是不是要来设置一个分隔符呀,这个分隔符咱们是不是应该就叫做哦,是不是啊,那有的同学会说,老师我们当前咱们的so语句的每一个部分中间用空格分格,那所以说这个or前边和后边咱们需不需要加上一个空格呢?大家注意不需要,为什么来看这儿啊。这个不就是我们的这个circleq误区,咱们的这种写法所生成的circleq吗?咱们所设置的分隔符逗号前边和后边默认它就会加上一个空格,能看懂吧?那所以说我们现在如果把分隔符换成是O之后,那我们当前咱们的O前边和后边是不是也会自动加上分隔符?能看懂吧,这个大家注意,所以说咱们并不要这并不需要这样去写啊好,那我们现在咱们再来一个执行,大家看这个circle语句看对不对,没有问题,Well ead等于谁?O ead等于谁,O ead等于谁,那因为我们当前这三条数据咱们都已经删过了,所以说呢,咱们最终这个返回的结果是零,受影响的行数为零,没有问题,对吧,大家注意,这个就是我们当前的佛一起标签。
14:26
它主要帮助我们来实现的就是一个批量操作,大家看好啊行。
我来说两句