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集合类型的用法和数组类型相似,无非就是从前台传过来的数据类型一个是
数组类型,一个是集合类型,根据自己的情况进行选择;对于多参数的情况目前未使用过,后续使用会进行补充。
看了以上解答还有不懂得欢迎留言评论,会第一时间进行解答。感谢大家支持!