mybatis 对库存表中的数据进行批量删除时,当库存表中的数据是最后一条时,同时删除商品库中的数据 ,其中根据skuId对库存表中的数据进行删除,根据goodsId对商品库中的数据进行删除,传递的参数是一个包含skuId的列表,库存表为stk_sku_stock,商品库表为shop_goods ,批量删除时删除的是多个商品
时间: 2024-02-11 20:05:14 浏览: 57
基于SpringBoot、SSM、Mybatis的库存预警系统设计源码
好的,针对您的问题,我可以给出以下思路:
1. 首先,需要在 MyBatis 的 Mapper XML 配置文件中编写删除语句,通过传入的 skuId 列表进行批量删除。
```xml
<delete id="batchDeleteBySkuIds" parameterType="java.util.List">
delete from stk_sku_stock where sku_id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
```
2. 接下来,在执行删除操作之前,需要查询库存表中是否还存在其他 skuId 对应的库存数据。
```xml
<select id="countBySkuIds" parameterType="java.util.List" resultType="java.lang.Integer">
select count(*) from stk_sku_stock where sku_id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
```
3. 如果查询结果为 0,表示当前要删除的 skuId 是最后一条数据,此时需要删除商品库中对应的商品数据。同样,在 Mapper XML 配置文件中编写删除语句。
```xml
<delete id="deleteByGoodsId" parameterType="java.lang.Long">
delete from shop_goods where goods_id = #{goodsId}
</delete>
```
4. 最后,在 Java 代码中调用 Mapper 中的方法执行删除操作,并根据查询结果来决定是否删除商品库中的数据。
```java
List<Long> skuIds = Arrays.asList(1L, 2L, 3L); // 待删除的 skuId 列表
int count = mapper.countBySkuIds(skuIds);
mapper.batchDeleteBySkuIds(skuIds);
if (count == skuIds.size()) {
Long goodsId = mapper.findGoodsIdBySkuId(skuIds.get(0)); // 查询商品库中的 goodsId
mapper.deleteByGoodsId(goodsId); // 删除商品库中对应的商品数据
}
```
希望这些思路能对您有所帮助。
阅读全文