2019-08-01

说到批量删除,就得先介绍一下mybatis 中 foreach collection的三种用法,这可以帮助我们快速实现批量处理数据的操作,不仅仅是批量删除,当然在这里我只介绍批量删除操作,其他情况下的操作原理相同。

mybatis 中 foreach collection的三种用法

foreach元素的属性主要有 item,index,collection,open,separator,close。



1 item表示集合中每一个元素进行迭代时的别名,具体说明:在 list 和数组中是其中的对象,在 map 中是 value,该参数为必选。
2 index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,在 list 和数组中,index 是元素的序号;在 map 中,index 是元素的 key。
3 open表示该语句以什么开始,
4 separator表示在每次进行迭代之间以什么符号作为分隔符,
5 close表示以什么结束。



在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:



1 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list集合类型
2 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array数组类型
3 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可



注意:上述所说的参数的属性值和相对应的mapper文件中的参数时一致的。

下面看看具体代码示例:

单参数array数组类型:

mapper.xml层代码:



1 <delete id="deleteRoster" parameterType="com.example.pojo.Roster">
2        delete from roster where mobile in 
3        <foreach collection="mobiles" index="index" item="mobile" 
4                 open="(" separator="," close=")">
5             #{mobile}
6         </foreach>
7 </delete>



此处的collection中的属性值和mapper.java中的传入参数一致。

另外注意item中的属性值可以和contorller接收到的参数名称不一样,在这里仅仅是一个别名,但是item中的属性值要和#{}中的保持一致,切记。

index具体在这里的作用不是太重要,不过还是加上吧!

mapper层代码:



1 void deleteRoster(String[] mobiles)



serviceImpl层代码:



1 @Override
2 public void deleteRoster(String[] mobiles) {
3     rosterMapper.deleteRoster(mobiles);    
4 }



Roster实体类代码:



1 其他属性值省略。
2 private String mobile;   //手机号
3 private String[] mobiles;   //根据手机号进行批量删除的手机号数组
4 get,set省略。



controller层代码:



1 @PostMapping("/roster/delete")
2 public Result<String> deleteRoster(@RequestBody Roster roster) {    //Roster是一个实体类,其中包含需要要String[] mobiles
3         try {
4            rosterService.deleteRoster(roster.getMobiles(), roster.getCustomerId());
5             return new Result<String>(OperateEnum.OPERATE_OK.getOperateStatus(), "删除成功", null);
6         } catch (Exception e) {
7             return new Result<String>(OperateEnum.OPERATE_FAIL.getOperateStatus(), "操作失败", null);
8         }
9 }



前台需要传递的数据类型及格式:(一定注意发送格式和接收解析的格式,否则会解析不出来)



1 发送请求数据类型格式:
2 {"mobiles":["157576651","15724367546",“15737756576”]}
3 发送请求内容编码格类型:Content-type:application/json;Charset:UTF-8
4 请求方式:post请求



在这里知识介绍了单参数array数组类型的方式,不过单参数List集合类型的用法和数组类型相似,无非就是从前台传过来的数据类型一个是

数组类型,一个是集合类型,根据自己的情况进行选择;对于多参数的情况目前未使用过,后续使用会进行补充。

看了以上解答还有不懂得欢迎留言评论,会第一时间进行解答。感谢大家支持!