关于上篇中提到的在Service层进行业务逻辑的编写过于简单
因此按照实际应用的逻辑进行了修改
根据传入的对象中属性,判断各种不同情况,分别进行处理

public Result saveAndUpdateAndDelete(SettingAndDetails settingAndDetails){

        StringBuffer stringBuffer = new StringBuffer();

        SysTableSettingDTO sysTableSettingDTO = settingAndDetails.getSysTableSettingDTO();
        SysTableSetting sysTableSetting = sysTableSettingMapStruct.toEntity(sysTableSettingDTO);

        List<SysTableSettingDetailsDTO> list = settingAndDetails.getSysTableSettingDetailsDTOList();
        List<SysTableSettingDetails> list1 = sysTableSettingDetailsMapStruct.toEntity(list);

        List<SysTableSettingDetailsDTO> detailsDTOListDeleted = settingAndDetails.getDetailsDTOListDeleted();
        List<SysTableSettingDetails> deleteList = sysTableSettingDetailsMapStruct.toEntity(detailsDTOListDeleted);

        if (sysTableSetting.getId()==null || sysTableSetting.getId()==0){
            //如果id为null或0就插入Setting
            Integer LastId;
            List<SysTableSetting> sysTableSettings = sysTableSettingMapper.selectAll();
            if (sysTableSettings!=null && sysTableSettings.size()>0){
                LastId = sysTableSettings.get(sysTableSettings.size() - 1).getId()+1;
            }else {
                LastId = 1;
            }
            sysTableSetting.setId(LastId);
            sysTableSettingMapper.insertSelective(sysTableSetting);//插入

            if (list1!=null && list.size()>0){
                //如果存在details就同时插入Details
                for (int i = 0; i < list1.size(); i++) {
                    List<SysTableSettingDetails> list3 = sysTableSettingDetailsMapper.selectAll();
                    Integer LastIdDetail;
                    if (list3!=null && list3.size()>0){
                        LastIdDetail = list3.get(list3.size()-1).getId()+1;
                    }else {
                        LastIdDetail = 1;
                    }
                    list1.get(i).setId(LastIdDetail);
                    list1.get(i).setParentId(sysTableSetting.getId());
                    sysTableSettingDetailsMapper.insertSelective(list1.get(i));//插入
                }
            }

        }else {
            //这里注意,如果除了id剩下的字段全部为null更新时就会出现sql语句错误!
            sysTableSettingMapper.updateByPrimaryKeySelective(sysTableSetting);//更新

            if (list1 != null && list1.size()>0){
                for (int i = 0; i < list1.size(); i++){
                    if (list1.get(i).getId()==null || list1.get(i).getId()==0){
                        List<SysTableSettingDetails> list3 = sysTableSettingDetailsMapper.selectAll();
                        Integer LastIdDetail;
                        if (list3!=null && list3.size()>0){
                            LastIdDetail = list3.get(list3.size()-1).getId()+1;
                        }else {
                            LastIdDetail = 1;
                        }
                        list1.get(i).setId(LastIdDetail);
                        list1.get(i).setParentId(sysTableSetting.getId());
                        sysTableSettingDetailsMapper.insertSelective(list1.get(i));
                    }else {
                        sysTableSettingDetailsMapper.updateByPrimaryKeySelective(list1.get(i));
                    }
                }
            }
        }

        if (deleteList!=null && deleteList.size()>0){
            for (int i = 0; i < deleteList.size(); i++) {
                sysTableSettingDetailsMapper.deleteByPrimaryKey(deleteList.get(i));
            }
        }

        return new Result();
    }

Q.E.D.


ALL WILL BE CLEAR