今天在工作写更新或者插入人员权限判断的时候的时候,正常思路是弹出窗口增加或者修改,而这个无疑会增加页面的书写量,因为配置权限的数据量少,并且 ,Ext框架有个特别有意思的操作方式(可以新增单元行数据,并且支持表格单元编辑哦)。
所以前端页面这里就有另外一种思路了,把所有的表格中的数据都一起提交上来,自然,新增的数据都是没有id的,修改的数据有id,把上传的修改数据全部覆盖掉就好了,前端处理完了,后端咋做呢?
后端咋处理呢?是不是还在用List集合处理?对,正常人第一反应就是这样的,让我们看看老前辈咋用mysql语句搞定的
for (int i = 0; i < jsonArray.size(); i++) {
jo = (JSONObject) jsonArray.get(i);
id = jo.get("id").toString();
if (i != 0) {
//巧妙的是这个(将所有的结果集连接到一起了)
sqlTmp = sqlTmp + " union all ";
}
//先将接收到的数据封装成sql的条件表(避免了重新生成集合循环的消耗)
sqlTmp += "select " + "'"
+ id
+ "' as id, "
+ (jo.get("domain").toString().equals("") ? "null" : ("'"+ UnionManUtil.repCom(jo.get("domain").toString()) + "'"))
+ " as domain, "
+ (jo.get("dept_name").toString().equals("") ? "null" : ("'"+ UnionManUtil.repCom(jo.get("dept_name").toString()) + "'"))
+ " as dept_name, "
+ (jo.get("user_id").toString().equals("") ? "null" : ("'"+ UnionManUtil.repCom(jo.get("user_id").toString()) + "'"))
+ " as user_id, "
+ (jo.get("user_name").toString().equals("") ? "null" : ("'"+ UnionManUtil.repCom(jo.get("user_name").toString()) + "'"))
+ " as user_name, "
+ (jo.get("editdata").toString().equals("") ? "null" : ("'"+ UnionManUtil.repCom(jo.get("editdata").toString()) + "'"))
+ " as editdata, "
+ (jo.get("remark").toString().equals("") ? "null" : ("'"+ UnionManUtil.repCom(jo.get("remark").toString()) + "'"))
+ " as remark";
}
//这里就是插入id为空的数据了
sql = "insert into permission("
+ " domain,dept_name,user_id,user_name,remark,editdata)"
+ " select "
+ " domain,dept_name,user_id,user_name,remark,editdata "
+ " from (" + sqlTmp + ") a " + "where a.id = '' ";
this.executeBySQL(sql);
log.info("操作者ID:" + OperID + " ==> \r\n" + sql);
//这里就是更新覆盖(b数据集表覆盖 需要更新的数据表)
sql = "update permission a, " + "(select * from ("
+ sqlTmp + ") a where a.id<>'' ) b " + "set "
+ "a.domain=b.domain, "
+ "a.dept_name=b.dept_name, "
+ "a.user_id=b.user_id, "
+ "a.user_name=b.user_name, "
+ "a.editdata=b.editdata, "
+ "a.remark=b.remark "
+ "where a.id=b.id";
this.executeBySQL(sql);
log.info("操作者ID:" + OperID + " ==> \r\n" + sql);
}
return true;
这篇博客分享了一种后端处理前端批量更新和插入数据的巧妙方法。通过构建SQL语句,利用UNION ALL操作,将前端提交的所有数据(包括新增和修改)合并为一个查询,然后通过一次插入和一次更新操作完成数据处理,避免了传统循环处理的复杂性和性能消耗。
1397

被折叠的 条评论
为什么被折叠?



