说明:
(1) 本篇博客需要注意的点:
● 在接收前端的参数时候,涉及到了【Spring MVC接收复合参数】;
● 涉及到了【Mybatis接收多个参数时,Mapper.xml中的parameterType应该怎么处理】;(这一点本篇博客没有介绍,在【附加Mybatis传递多个参数时的处理策略】中做了介绍;)
● 涉及到了【mybatis批处理时,foreach子标签的使用】;
(2)声明: Mybatis接接收多个参数的情况,以前经常遇到,只是在写本篇博客的时候,意识到需要好好总结一下;
一:【批量上下架商品】接口说明;
1.【批量上下架商品】接口文档;
2.批量上下架商品,在界面上的表现;
可以看到,我们可以选择多个商品,来实现批量的上下架;
插:这儿的批处理操作:涉及到了【Spring MVC接收复合数据】、【Mybatis批处理】、【SQL语句拼凑】等以前介绍过的内容;
可以参考:
● 【接收表单复合数据】;
● 【MyBatis批处理】;
● 【WHERE子句条件查询】;
● 【UPDATE语句】;
这些参考的地方,在下面用到的时候,会逐一介绍;
二:正式开发;
1.在ProductAdminController类中,创建批量上下架商品的方法:batchUpdateSellStatus()方法;
说明:
(1) 请求方式、url要符合接口文档的要求;
(2) 因为前端传过来的ids这个参数,存在有多个值的情况:所以,我们这儿使用数组来接收ids参数;关于Spring MVC接收复合参数,可以参考【接收表单复合数据】;只是,这儿我们使用的是数组去接收参数;
(3) Service层的处理批量上下架的逻辑方法,batchUpdateSellStatus()方法,在下一部分介绍;
2.在ProductServiceImpl实现类中,编写批量上下架的业务方法,batchUpdateSellStatus()方法;并在ProductServiceI接口中,反向生成该方法的声明;
(1)在ProductServiceImpl实现类中,编写批量上下架的业务方法,batchUpdateSellStatus()方法;
没什么好说的,这儿调用了在Dao层编写的,实现批量更改商品status状态的方法:batchUpdateSellStatus()方法;这会在下一部分介绍;
(2) 在ProductServiceI接口中,反向生成该方法的声明;
3.在ProductMapper接口中定义批量更新商品状态的方法:batchUpdateSellStatus()方法;并在ProductMapper.xml中编写对应的实现SQL;(涉及到了mybatis的批量更新,比较重要)
(1)在ProductMapper接口中定义批量更新商品状态的方法:batchUpdateSellStatus()方法;
说明:这儿就是接收Service传过来的两个参数;需要注意,如果有多个参数时候,是必须要使用@Param注解的;
(2) 在ProductMapper.xml中编写对应的实现SQL;(重点!!!)
说明:
(1) 在【MyBatis进阶八:Mybatis批处理;(批量插入,批量删除,批量更新待写…)】中,我们第一次介绍了mybatis的批处理,但是当时只介绍了插入和删除的案例;本篇博客就是更新的案例;
(2) 在前面演示mybatis批处理的插入和删除时,其参数只有一个,就是那个List;自然,我们们可以使用【parameterType=“java.util.List”】的方式,去接收参数:
但是,在这儿,我们有两个参数:Integer[] ids和Integer sellStatus,这儿有两个参数;而正好,我们在Mapper接口中接收参数的时候,使用了@Param注解,所以,在SQL语句中,就可以不用写【parameterType=“***”】,就能获取到这个参数;
PS:关于Mybatis如何传递多个参数时,parameterType的处理策略,可以参考 【附加Mybatis传递多个参数时的处理策略】;
(3) 因为是批量处理多个数据,所以这儿我们使用到了foreach子标签,来遍历集合;同时为了能够拼凑批量处理的SQL语句,这儿也进行了设置;下面依次进行说明:
● 首先,我们使用到了in这个运算符,来实现条件判断;有关in运算符,可以参考【【WHERE子句条件查询】;
● 然后,就是foreach子标签的说明;其实,在【MyBatis进阶八:Mybatis批处理;(批量插入,批量删除,批量更新待写…)】中已经介绍过这标签了;这儿再啰嗦一下,
需要注意到,如果我们没有在Mapper接口处,使用@Param注解来设定集合名字,那么我们遍历集合的时候,foreach的collection就必须写成“list”,这在 【MyBatis进阶八:Mybatis批处理;(批量插入,批量删除,批量更新待写…)】做了说明;(PS:这条不确定是否一定是这样……因为,没有实测)
三:测试;
启动项目;