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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章