springboot + vue 动态录入数据

1、动态实体对象

package org.jeecg.modules.demo.das.dynamic.entity;import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.demo.das.utils.StringUtils;import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;public class InsertMap  implements Serializable {//插入后返回新增记录IDprivate String id ;//表名private String tableName ;//key:value 字段名:字段值private Map<String, Object>   fields;//private int opType ; //操作类型 1:增加 2:修改 3:查询public String getId() {return id;}public String getTableName() {return tableName;}public void setId(String id) {this.id = id;}public void setTableName(String tableName) {this.tableName = tableName;}public void setFields(Map<String, Object> fields) {this.fields = fields;}private LoginUser getLoginUser() {LoginUser sysUser = null;try {sysUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser) SecurityUtils.getSubject().getPrincipal() : null;} catch (Exception e) {//e.printStackTrace();sysUser = null;}return sysUser;}public Map<String,Object> getFields(){Map<String,Object> newFields = new HashMap<>();boolean  isExistId = false ;final LoginUser loginUser = getLoginUser();for(String key : fields.keySet()) {Object value = fields.get(key);String newKey = StringUtils.toUnderScoreCase(key);if(newKey.equalsIgnoreCase("id")){isExistId = true ;}if(key.equalsIgnoreCase("sysOrgCode")&& StringUtils.isAllEmpty("")){value = loginUser.getOrgCode();}newFields.put(newKey,value);}//sysOrgCodeif(!isExistId){newFields.put("id", UUID.randomUUID().toString());if(loginUser !=null ) {newFields.put("create_By", loginUser.getUsername());}newFields.put("create_Time", new Date());}else{if(loginUser !=null ) {newFields.put("update_By", loginUser.getUsername());}newFields.put("update_Time", new Date());}return newFields ;}
}

2、后端处理
1)controller

@PostMapping(value = "/add")public Result<?> addtest(@RequestBody JSONObject insertMap){ final InsertMap insertMap1 = insertMap.toJavaObject(InsertMap.class);dasInfoArchivesService.insertInfo(insertMap1); return Result.OK("ok");}
 service
	 public interface IDasDynamicArchivesService extends IService<DasDynamicArchives> {public void insertInfo(InsertMap insertMap);}
    mapping
	    public interface DasDynamicArchivesMapper extends BaseMapper<DasDynamicArchives> {public void insertInfo(InsertMap insertMap);}

servicImpl

@Service
public class DasInsertServiceImpl extends ServiceImpl<DasInsertMapper, DasDynamicArchives> implements IDasInsertService {@Overridepublic void insertInfo(InsertMap insertMap) {dasInsertMapper.insertInfo(insertMap.getFields(),insertMap.getTableName());}
}`

xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.demo.das.dynamic.mapper.DasDynamicArchivesMapper">
<insert id="insertInfo" parameterType="org.jeecg.modules.demo.das.dynamic.entity.InsertMap"  useGeneratedKeys="true" keyProperty="id">insert  into ${tableName}<!-- ignore <selectKey resultType="String" order="AFTER" keyProperty="id">SELECT uuid()</selectKey>--><foreach collection="fields.keys" item="key" open="(" close=")" separator="," >${key}</foreach>values<foreach collection="fields.keys"  item="key" open="(" close=")" separator=",">#{fields.${key}}</foreach></insert><update id="updateInfoByID"  >UPDATE ${tableName} set<foreach item="value" index="key" collection="fields" separator=","><if test="key != 'id'">${key} = #{value}</if></foreach>WHERE<foreach item="value" index="key" collection="fields" separator=","><if test="key == 'id'">ID = #{value}</if></foreach></update>
</mapper>

3、前端获取数据

//支持java对象的Map,Rest能接收map参数objToStrMap(obj) {let strMap = new Map();for (let k of Object.keys(obj)) {strMap[k] =  obj[k] ;}return strMap;},
/*js的map, java后端解析有问题
objToStrMap(obj) {let strMap = new Map();for (let k of Object.keys(obj)) {strMap.set(k,  obj[k]);}return strMap;},*/
handleOk () {const that = this;let temp = '' ; // 触发表单验证this.$refs.form.validate(valid => {{that.confirmLoading = true;let httpurl = '';let method = '';if(!this.model.id){httpurl+= this.url.add;method = 'post';}else{httpurl+= this.url.edit;method = 'put';}let fyear =  this.model.filingYearlet no = this.model.archiveCtgNolet tmpmodel = this.modellet map = this.objToStrMap(this.model)//重点对象转换let newModel = {id:null,tableName:'das_info_archives','fields': map}if(this.model.addBatch&&this.model.sourceIds){httpurl = this.url.addBatch;method = 'post';newModel = {dasInfoArchives:this.model,sourceIds:this.model.sourceIds}}httpAction(httpurl,newModel,method).then((res)=>{if(res.success){ this.$emit('ok',fyear,no ); }else{that.$message.warning(res.message);}}).finally(() => {that.confirmLoading = false;that.close();})}})},