大项目总结笔记(1)--实现对列表的批量修改

1.前言

  最近在网上跟了前辈带的一个项目,其中我负责系统管理模块,因为我之前没有接触过类似的模块,有一些基础的概念尝试总结一下。

1.一般的控制系统的项目中,管理员功能中都会有系统管理。

2.系统管理一般分为:系统参数、菜单管理、权限管理、字段扩展

3.菜单和权限一般都会有对应关系,不同的权限对应不同的菜单

4.字段扩展是对于数据库字段信息的管理,一般会有几张表来记录所有的字段及其关系

 

 2.问题-解决

   在开发扩展字段中的修改扩展字段功能时,我很快的完成了单个字段的修改,但这对于管理员来说效率太低了。所以,我打算开发批量修改。我拟定了两种方案1.从前端传回包括修改信息在内的所有字段的json数据,我在后端进行遍历比对。2.前端只会传回修改的信息,很修改行的id。

    其实我没有太犹豫就选择了方案2,我认为这个会方便很多。所以我重新设计了我的DTO

package com.zeroone.star.project.dto.j1.systemmanagement;

import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.Map;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("获取所需字段的id信息")
public class CstFieldExtplusDTO {
    @ApiModelProperty(value ="字段id" ,example ="1" )
    private Integer fieldExtId;


    @ApiModelProperty
    private Map<String,String> extField;

    public CstFieldExtplusDTO(String fieldExtId){
        this.fieldExtId=Integer.valueOf(fieldExtId);
    }

}

  我在原先只传回一个id的基础上,新增了一个Map来接受json信息(键值对)。但是这里又会遇到问题,这样操作,我顶多只能修改一行的数据,无法实现多行修改。于是我在controller层的update函数接受信息中,将参数修改为List<CstFieldExtplusDTO> cstFieldExtplusDTOList(这里插个题外话,接受json数据记得要加上@RequestBody注解

   前端传回的json数据格式如下,extField中的数据是扩展字段表的修改项

[
  {
    "extField": {},
    "fieldExtId": 1
  },
  {
     "extField": {},
    "fieldExtId": 2
  }
]

controller层的update函数如下:

 @PutMapping("/update")
    public JsonVO<List<CstFieldExtplusUpdateVO>> updateField(@RequestBody List<CstFieldExtplusDTO> cstFieldExtplusDTOList){
        int i=0;
        List<CstFieldExtplusUpdateVO> list=new ArrayList<>();
        while(i<cstFieldExtplusDTOList.size()){
            Map<String,String> extField=cstFieldExtplusDTOList.get(i).getExtField();
            Set keyset=extField.keySet();
            Iterator it=keyset.iterator();
            UpdateWrapper<CstFieldExt> wr=new UpdateWrapper<>();
            while(it.hasNext()){
                String key= (String) it.next();
                String value=(String)extField.get(key);
                wr.set(key,value).eq("field_ext_id",cstFieldExtplusDTOList.get(i).getFieldExtId());
                cstFieldExtplusService.update(wr);
            }
             QueryWrapper<CstFieldExt> wrp= new QueryWrapper<>();
             wrp.eq("field_ext_id",cstFieldExtplusDTOList.get(i).getFieldExtId());
             CstFieldExt cstFieldExt=cstFieldExtplusService.getOne(wrp);
             list.add(BeanUtil.copyProperties(cstFieldExt,CstFieldExtplusUpdateVO.class));
             i++;
        }
        return JsonVO.success(list);
    }
}

3.运行结果

修改前:

 发送请求:

 相应内容:

 修改成功:

 4.总结:

   我很少使用集合进行开发,如List、Map之类的,这是我的短板,活用集合来进行数据存储和处理,能大幅度提高效率。这次我的代码感觉有些笨重,应该是可以继续精简的,限于我的能力而无法实现,希望有大佬看见,可以提点意见出来。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值