Spring学习笔记之一

Spring存储Json数据

最近在做一个项目,其中有一个问卷调查模块,当完成问卷调查后,前台会将数据封装成Json格式,如何封装我会在dwz学习之路介绍(因为项目用的是dwz框架)。当Json数据从前台传到后台后,我们就会面临一个问题:如何将后台获得Json数据存储到数据库?方法也就两种:1.循环存储;2.批量存储。

1.循环存储Json数据

@ResponseBody
@RequestMapping(value = "/saveJson")
public ModelAndView saveJson(HttpServletRequest request,@RequestBody QJsonData[] qJsonData){
	try {
		//将json数据循环的转换到问卷填写情况的实体中,在依次将数据存入数据库中
		for(int i=0;i<qJsonData.length;i++){
		<span style="white-space:pre">	</span>QuestionnaireFillInfo qf=new QuestionnaireFillInfo();
			qf.setQuestionnaireId(qJsonData[i].getQuId());
			qf.setQuestionId(qJsonData[i].getqId());
			qf.setItemId(qJsonData[i].getItemId());
		<span style="white-space:pre">	</span>qf.setFillMemo(qJsonData[i].getFillMemo());		
			previewService.savePreviewBean("t_questionnaire_fill_info", qf);
		}
		return ajaxDoneSuccess("成功!");
	} catch (Exception e) {
		System.out.println(e.getMessage());
		return ajaxDoneError("失败!"+"<br/>系统报错信息:<br/>"+e.getMessage());
	}
}
上面是controller类的代码,如何后台获取前台的Json数据,通过@RequestBody QJsonData[] qJsonData,下面for循环,遍历一下Json数据,声明一个按照数据将要存储表的实体类,依次将Json数据存储到该实体类中,然后调用service的方法。
public int savePreviewBean(String tableName,QuestionnaireFillInfo questionnaireFillInfo) throws Exception {
<span style="white-space:pre">	</span>String sql = "insert into " + tableName + "(questionnaire_id,question_id,item_id,fill_memo,fill_time) values(?,?,?,?,now())";
	return baseDao.jdbcTemplate.executeArray(sql,questionnaireFillInfo.getQuestionnaireId(),questionnaireFillInfo.getQuestionId(),questionnaireFillInfo.getItemId(),questionnaireFillInfo.getFillMemo());
}
上面是service层的存储方法,但是这样虽然能达到存储目的,但是缺点就是:1.麻烦,2.效率低。尤其是如果数据多的话,会有很大问题。所以我们要用到批量存储。

2.批量存储

由于底台封装了批量存储数据的方法,并且Spring相关的书也会介绍批量处理的方法。
@ResponseBody
@RequestMapping(value = "/saveJson")
public ModelAndView saveJson(HttpServletRequest request,@RequestBody QJsonData[] qJsonData){
	try {
		//将json数据循环的转换到问卷填写情况的实体中,批量将数据存入数据库中
		previewService.saveSomePreviewBean("t_questionnaire_fill_info", qJsonData);
		return ajaxDoneSuccess("成功!");
	} catch (Exception e) {
		System.out.println(e.getMessage());
		return ajaxDoneError("失败!"+"<br/>系统报错信息:<br/>"+e.getMessage());
	}
}
上面一看代码就显得简单多了,直接把Json数据放进方法里。我们来看下service里的方法。
public int[] saveSomePreviewBean(String tableName,QJsonData[] qJsonData) throws Exception {
	String sql = "insert into " +tableName + "(questionnaire_id,question_id,item_id,fill_memo,fill_time) values(":quId,:qId,:itemId,:fillMemo,now())";
	return baseDao.jdbcTemplate.executeBatchByArrayBeans(sql, qJsonData);
}
如果批量存储,values里就不是“?”而是“:+数据库对应Json里的名”,问题就完美的解决了。





你可能感兴趣的:(spring)