上一篇说到了列式存储,这一篇说它的存储问题,将每个模块的所有属性字段单独存到一张表中,新增页面时,所有的字段都去数据库请求,这样多个模块的新增功能可以共用一个jsp。由于每个模块的字段个数不一样,有的多有的少,这就导致用post请求发送数据时参数个数不能写死,于是只好把整个dataArray传给后台,以前没用过这种写法,自己又是个菜鸟,就用了一个很笨的办法,就是用for循环加getPara()方法接收数据。具体方法见代码:
dataArray结构:
js发送post请求,将数组dataArray作为参数传给后台
function postData() { $.post("saveData", { "dataArray" : dataArray, //dataArray是一个二维数组,每个数组元素均为一个对象 "dataArrayLength" : dataArray.length }, function(data) { window.history.back(); }); return false;}
Controller接收数据
public void saveData() { int dataArrayLength= getParaToInt("dataArrayLength"); ListdataList = getParams(dataArrayLength); boolean result = DataService.srv.saveData(dataArrayLength, dataList); //将数据存到数据库中 } private List getParams(int dataArrayLength) { List dataList = Lists.newArrayList(); for (int i = 0; i < dataArrayLength; i++) { DataModel dataModel = new DataModel(); dataModel.id = getPara("dataArray[" + i + "][ID]"); dataModel.resId = getPara("dataArray[" + i + "][RES_ID]"); dataModel.resType = getPara("dataArray[" + i + "][RES_TYPE]"); dataModel.fieldId = getPara("dataArray[" + i + "][FIELD_ID]"); dataModel.fieldName = getPara("dataArray[" + i + "][FIELD_NAME]"); //属性名 dataModel.dataValue = getPara("dataArray[" + i + "][DATA_VALUE]"); //属性值 dataModel.fieldType = getPara("dataArray[" + i + "][FIELD_TYPE]"); dataModel.fieldSort = getPara("dataArray[" + i + "][FIELD_SORT]"); dataModel.allowNull = getPara("dataArray[" + i + "][ALLOW_NULL]"); dataList.add(dataModel); } return dataList; }
由于一个字段在数据库中即是一条数据,因此汪数据库存储dataList时需要用到事务。