JAVA代码维护公共新增删除修改

文章描述了一种常见的IT场景,即通过公共方法`saveOrUpdateOrDeleteMany2Many`简化多对多关系表的维护过程,包括数据的新增、删除和修改,减少了大量重复的代码量。
摘要由CSDN通过智能技术生成

很多时候, 我们需要写一大堆的代码维护新增删除和修改.

例如:

        if (productDto.getId() != null) {
            //如果是更新就找到需要删除的,删除以前的
            List<ProductWithArea> remove = CommUtil.findDifferenceRemove(areas, oldData, p -> p.getProductId() + "#" + p.getAreaId());
            if (CollectionUtil.isNotEmpty(remove)) {
                productWithAreaService.removeByIds(remove.stream().map(ProductWithArea::getId).collect(Collectors.toList()));
            }
            List<ProductWithArea> add = CommUtil.findDifferenceAdd(areas, oldData, p -> p.getProductId() + "#" + p.getAreaId());
            if (CollUtil.isNotEmpty(add)) {
                productWithAreaService.saveBatch(add);
            }
        } else if (areas != null) {
            productWithAreaService.saveOrUpdateBatch(areas);
        }

流程如下:

 

我们可以直接使用公共方法完成:

/**
     *  新增或者删除或者修改, 多对多关系表维护
     *  (注:多对多不涉及修改逻辑)
     * @param newData 新数据(前端)
     * @param oldData 老数据(数据库)
     * @param getKey 对比key,非主键对比. 一般是: t-> t.getA()+"#" + t.getB()  比如商品与标签多对多关系表: t-> t.get商品Id()+"#" + t.get标签Id()
     * @param <RT>
     */
    protected <RT> void saveOrUpdateOrDeleteMany2Many(List<T> newData, List<T> oldData, SFunction<T, RT> getKey) {
        newData = Optional.ofNullable(newData).orElse(new ArrayList<>());
        oldData = Optional.ofNullable(oldData).orElse(new ArrayList<>());
        TableInfo tableInfo = TableInfoHelper.getTableInfo(getEntityClass());

        //对比,删除以前的老数据(以前有,现在没有)
        List<T> remove = CommUtil.findDifferenceRemove(newData, oldData,getKey);
        if (CollectionUtil.isNotEmpty(remove)) {
            List<Serializable> removeIds = newData.stream().map(d -> findEntityId(d, tableInfo.getKeyProperty())).collect(Collectors.toList());
            removeByIds(removeIds);
        }
        //对比,新增数据(以前没有,现在有)
        List<T> add = CommUtil.findDifferenceAdd(newData, oldData,getKey);
        if (CollUtil.isNotEmpty(add)) {
            saveBatch(add);
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值