ssm批量新增修改操作

需要给项目添加批量处理操作,之前没有做过ssm框架的批量,在这个过程中遇到好几个坑,记录下来,避免下次再犯错误。

可以把数组序列化成Json字符串提交,后台springmvc里用@ RequestBody String 方式接收,然后把这个接收到的json串用json工具转换为数组,这样就解决了springmvc不能绑定对象数组的问题了。

将对象数组用{“list”:JSON.stringify(array)}绑定到后台,后台用@RequestBody String configs接收,接收的是json数据,然后用jackson把configs转为数组List configList。

var configList= JSON.stringify([    
            {configName: "sgs-demo", configId: "1"},    
            {configName: "sgs-demo-1", configId: "2"}    
        ]);  
  
        $.ajax({    
            type: "post",   
            url: "doRedistribution.do",   
            data:configList ,    
            contentType: "application/json; charset=utf-8",    
            dataType: "json",    
            success: function (response, ifo) {    
                alert("success");    
            }, error: function () {    
                alert("error");    
            }    
        })   

dataType:‘json’,//预期的服务器响应的数据类型。

contentType: “application/json; charset=utf-8”,//发送数据到服务器时所使用的内容类型。默认是:“application/x-www-form-urlencoded”。

如果不加contentType,configs接收的数据为类似%7B%22id%22%3A243%2C%name%22%3A4%2C%22age%22%3A1048%2C%22格式,json转换会报错,

controller层

@RequestMapping(value="doRedistribution.do")
      @ResponseBody
      public Map<String, Object> doRedistribution(HttpServletRequest  request,RedirectAttributes attr,@RequestBody String CustAdminuser){
                  Map<String, Object> resultMap = new HashMap<>();
                  try{
                        Gson gson = new Gson();
                        List<CustAdminuser> list =  gson.fromJson(CustAdminuser, new TypeToken<ArrayList<CustAdminuser>>()  {}.getType());
                       //这个地方特别注意,将json转换成 list
                    for(int i = 0;i<list.size();i++){//循环list
                          list.get(i).setHistory(Constant.history_new); //获取list 中对象,给对象添加相应的对象
                          list.get(i).setAssigner(LUser.getRyId());
                          list.get(i).setDeptid(LUser.getRyDeptId());
                          list.get(i).setCustAdminuserId(SequenceUtil.getSerial());
                          list.get(i).setCause(Constant.Redistribution);
                          list.get(i).setHistory(Constant.history_new);
                          list.get(i).setIsLocked(Constant.state_old);
                          list.get(i).setView(Constant.state_old);
                          list.get(i).setPicked(Constant.state_old);
                          list.get(i).setCommed(Constant.state_old);
                          list.get(i).setInterviewed(Constant.state_old);
                    }
                        custAdminuserService.doAddCustAdminuserByBatch(list);
                        resultMap.put("status", 200);
                        resultMap.put("message", "成功!");
                  }catch(Exception e){
                        resultMap.put("status", 500);
                        resultMap.put("message", "失败!");
                  }
            
            return resultMap;
      }

批量在新增mapper.xml

<!-- 批量新增 -->
<insert id="addCustAdminuserByBatch" parameterType="java.util.List">
        insert into CustAdminuser
          (CustAdminuserId,custid,adminuserID,assigner,assignedTime,createTime,cause,history,deptid,isLocked,View,picked,Commed,interviewed)
    values
    <foreach collection="list" item="item" index="index" separator=","  >
          (#{item.CustAdminuserId},#{item.custid},#{item.adminuserID},#{item.assigner},now(),now(),#{item.cause},#{item.history},#{item.deptid},#{item.isLocked},#{item.View},#{item.picked},#{item.Commed},#{item.interviewed})
    </foreach>
</insert>

批量在修改mapper.xml

<if test="list!=null">
        update CustAdminuser set
        history='1'
        where 1 = 1  and CustAdminuserId in
  <foreach collection="list" item="item" index="index" separator=","   open="(" close=")">
                          #{item.CustAdminuserId}
  </foreach>
  </if>
</update>

这个地方写了一个SQL语句 条件 放在了in中 (update set xx=? where id in(?,?,?,?,?,?))
写成多个SQL出现事务问题,解决不了只能用上边的方法。

当同时执行多条SQL语句的时候,需要在Mybatis配置文件中进行allowMultiQueries配置:

url  = jdbc:mysql://xxxxxxx:3306/fg_test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值