修改的业务逻辑,这是原始的代码,不够严谨
//首先根据spu的id删除sku Sku sku = new Sku(); sku.setSpuId(goods.getId()); List<Sku> oldSkus = skuMapper.select(sku); for (Sku s : oldSkus) { skuMapper.deleteByPrimaryKey(sku.getId()); stockMapper.deleteByPrimaryKey(sku.getId()); } //更新sku Spu spu = new Spu(); BeanUtils.copyProperties(goods, spu); long currentTimeMillis = System.currentTimeMillis(); Date date = new Date(currentTimeMillis);
方法二,用通用mapper的方式,将id的结合转为字符串
Sku sku = new Sku(); sku.setSpuId(goods.getId()); List<Sku> oldSkus = skuMapper.select(sku); ArrayList<Long> skuIds = new ArrayList<>(); if (!CollectionUtils.isEmpty(oldSkus)) { for (Sku s : oldSkus) { skuIds.add(s.getId()); } String str = StringUtils.join(oldSkus, ","); this.stockMapper.deleteByIds(str); this.skuMapper.deleteByIds(str); }
public interface SkuMapper extends Mapper<Sku>,DeleteByIdsMapper<Sku> {
方式三:example的方式
Sku sku = new Sku(); sku.setSpuId(goods.getId()); List<Sku> oldSkus = skuMapper.select(sku); if (!CollectionUtils.isEmpty(oldSkus)){ //得到所有的id的集合 ArrayList<Long> ids = new ArrayList<>(); for (Sku skus : oldSkus) { ids.add(skus.getId()); } //删除stock Example example = new Example(Stock.class); example.createCriteria().andIn("sku_id",ids); this.stockMapper.deleteByExample(example); //删除spu this.skuMapper.delete(sku); }sku不用遍历删除,直接根据spu的id删除即可