使用Map接收并解析ajax传入的参数,将Map转换对应的Entity实体类

由于页面表单内容实在太多(提交一个表单的数据需要存放到多张数据库表里面,页面每个tag内容对应一个数据表),所以在springMvc的Controller方法中使用Map进行接收页面表单参数(此时需要保证多个Entity里面的属性互不相同,否则在表单参数封装到Map里面时会出现覆盖现象),表单页面如下:

前端ajax代码如下:

		//获取所有tag里面包含name属性的dom元素内容,汇总到 ajaxData中
		var ajaxData = $("#formData").serialize();
		$.ajax({
			type : "POST",
			url : "/chinalco/tenderProject/api/saveOrUpdate",
			data : ajaxData,
			dataType : "json",
			success : function(result) {
				if (result.result == "success") {
					layer.close(index);
					layer.msg("操作成功",{icon:1});
					setTimeout(function() {
						location.href = "/chinalco/tenderProject/index";
					}, 2000)
				} else if (result.result == "failed") {
					layer.alert("保存失败!");
					layer.close(index);
				}
			},
			error : function() {
				layer.alert("保存失败!");
				layer.close(index);
			}
		});

前端的ajax请求提交到后台SpringMVC的controller中使用的是@RequestParam Map<String,String> paramsMap参数接收ajax的序列化参数,后台方法如下:

    @RequestMapping(value = "/saveOrUpdate", produces = "application/json; charset=UTF-8")
    public String saveOrUpdate(@RequestParam Map<String,String> paramsMap) {
    	Map<String, Object> resultMap = new HashMap<String, Object>();
		Subject subject = SecurityUtils.getSubject();
		Session session = subject.getSession();
		User user = (User) session.getAttribute(Constants.SESSION_USER);
		paramsMap.put("insert_people", user.getUserId());
    	try {
    		tenderProjectService.saveOrUpdate(paramsMap);
    		resultMap.put("result", "success");
    	} catch (Exception e) {
    		e.printStackTrace();
    		resultMap.put("message", e.getMessage());
    		resultMap.put("result", "failure");
    	}
    	return JsonKit.toJson(resultMap);
    }

在后台的Map参数paramsMap里面包含了多张数据表的内容,那么如何将其转换为每张表对应的Entity呢?如果表单内容较少的话可使用map.get("key")的方式获取值然后使用entity.setter方法放到Entity里面,但是我遇到的表单内容实在太多了,所以还是使用反射来实现Map转Entity吧,代码如下:

	public void mapToEntity(Object entity,Map<String, String> paramsMap) throws Exception {
		Field[] tenderProjectFields = entity.getClass().getDeclaredFields();
		for (int i = 0; i < tenderProjectFields.length; i++) {
			String fieldName = tenderProjectFields[i].getName();
			String paramsMapVlue = paramsMap.get(fieldName);
			if (StringUtils.isEmpty(paramsMapVlue)) {
				continue;
			}
			tenderProjectFields[i].setAccessible(true);
			tenderProjectFields[i].set(entity, paramsMapVlue);
			//System.out.println(fieldName + " = " + paramsMapVlue);
		}
	}

业务层代码就是分别封装各个Entity并且向数据表执行insert操作了:

	@Override
	@Transactional(rollbackForClassName = "Exception")
	public void saveOrUpdate(Map<String, String> paramsMap) throws Exception {
		TenderProject tenderProject = new TenderProject();
		mapToEntity(tenderProject,paramsMap);// chinalco_tender_project主表数据
		TenderProjectScore tenderProjectScore = new TenderProjectScore();
		mapToEntity(tenderProjectScore,paramsMap);// chinalco_tender_project_score从表数据
		TenderProjectNotice tenderProjectNotice = new TenderProjectNotice();
		mapToEntity(tenderProjectNotice,paramsMap);//chinalco_project_notice表赋值
		TenderProjectBidGeneral tenderProjectBidGeneral = new TenderProjectBidGeneral();
		mapToEntity(tenderProjectBidGeneral,paramsMap);//chinalco_project_bid_general表赋值
		TenderProjectBidDoc tenderProjectBidDoc = new TenderProjectBidDoc();
		mapToEntity(tenderProjectBidDoc,paramsMap);//chinalco_project_bid_doc表赋值
		TenderProjectBidOpen tenderProjectBidOpen = new TenderProjectBidOpen();
		mapToEntity(tenderProjectBidOpen,paramsMap);//chinalco_project_bid_doc表赋值
		
		tenderProject.setUpdatePeople(paramsMap.get("insert_people"));
		tenderProject.setUpdateTime(sdf.format(new Date()));// 创建时间
		if (StringUtils.isEmpty(tenderProject.getId()))
			//chinalco_tender_project主表操作
			tenderProject.setIsDelete(DeleteNormalType.NORMAL);
			tenderProject.setId(RandomKit.randomStr());
			tenderProject.setInsertPeople(paramsMap.get("insert_people"));
			tenderProject.setInsertTime(sdf.format(new Date()));
			tenderProjectMapper.insertSelective(tenderProject);
			//chinalco_tender_project_score从表操作
			tenderProjectScore.setId(RandomKit.randomStr());
			tenderProjectScore.setProjectId(tenderProject.getId());
			tenderProjectScoreMapper.insertSelective(tenderProjectScore);
			//chinalco_project_notice从表操作
			tenderProjectNotice.setId(RandomKit.randomStr());
			tenderProjectNotice.setProjectId(tenderProject.getId());
			tenderProjectNoticeMapper.insertSelective(tenderProjectNotice);
			//chinalco_project_bid_general从表操作
			tenderProjectBidGeneral.setId(RandomKit.randomStr());
			tenderProjectBidGeneral.setProjectId(tenderProject.getId());
			tenderProjectBidGeneralMapper.insertSelective(tenderProjectBidGeneral);
			//chinalco_project_bid_doc从表操作
			tenderProjectBidDoc.setId(RandomKit.randomStr());
			tenderProjectBidDoc.setProjectId(tenderProject.getId());
			tenderProjectBidDocMapper.insertSelective(tenderProjectBidDoc);
			//chinalco_project_bid_open从表操作
			tenderProjectBidOpen.setId(RandomKit.randomStr());
			tenderProjectBidOpen.setProjectId(tenderProject.getId());
			tenderProjectBidOpenMapper.insertSelective(tenderProjectBidOpen);
		} else {// 执行update
			//chinalco_tender_project主表操作
			tenderProjectMapper.updateByPrimaryKeySelective(tenderProject);
			String projectId = tenderProject.getId();
			//chinalco_tender_project_score从表操作
			tenderProjectScoreMapper.deleteByProjectId(projectId);// 删除从表旧数据
			tenderProjectScore.setId(RandomKit.randomStr());
			tenderProjectScore.setProjectId(projectId);
			tenderProjectScoreMapper.insertSelective(tenderProjectScore);// 保存从表新数据
			//chinalco_project_notice从表操作
			tenderProjectNoticeMapper.deleteByProjectId(projectId);
			tenderProjectNotice.setId(RandomKit.randomStr());
			tenderProjectNotice.setProjectId(projectId);
			tenderProjectNoticeMapper.insertSelective(tenderProjectNotice);
			//chinalco_project_bid_general从表操作
			tenderProjectBidGeneralMapper.deleteByProjectId(projectId);
			tenderProjectBidGeneral.setId(RandomKit.randomStr());
			tenderProjectBidGeneral.setProjectId(projectId);
			tenderProjectBidGeneralMapper.insertSelective(tenderProjectBidGeneral);
			//chinalco_project_bid_doc从表操作
			tenderProjectBidDocMapper.deleteByProjectId(projectId);
			tenderProjectBidDoc.setId(RandomKit.randomStr());
			tenderProjectBidDoc.setProjectId(projectId);
			tenderProjectBidDocMapper.insertSelective(tenderProjectBidDoc);
			//chinalco_project_bid_open从表操作
			tenderProjectBidOpenMapper.deleteByProjectId(projectId);
			tenderProjectBidOpen.setId(RandomKit.randomStr());
			tenderProjectBidOpen.setProjectId(projectId);
			tenderProjectBidOpenMapper.insertSelective(tenderProjectBidOpen);
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值