众所周知,纵表容易扩展,但是数据不直观,应用起来比较麻烦,横表容易理解,数据便于处理,但是如果增加字段,就需要修改数据库。两者有不同的应用场景,具体参考我的另一篇文章:
https://blog.csdn.net/hanruikai/article/details/79730028
在设计信用卡模块时,由于信用卡过滤条件需要配置,便于灵活扩展,所以采用了纵表的处理方式。结构如下:
参数key为过滤条件。
在数据处理时,比如读取所有信用卡信息以及配置参数,利用map存储,key为credit id,value为一个map,用来存储参数。
可以对某个key单独进行特殊逻辑处理,比如把value拆分。
最后,遍历map,key为信用卡id,这个前端并不关心,去掉这个层,把作为value对map放入list中,返回前端即可
for (CreditCardInfoAndParam creditCardInfoAndParam : creditCardInfoAndParamList) { if (!creditIdList.contains(creditCardInfoAndParam.getId())) { creditIdList.add(creditCardInfoAndParam.getId()); } JSONObject paramJson = json.getJSONObject(creditCardInfoAndParam.getId().toString()); if (paramJson == null) { paramJson = new JSONObject(); paramJson.put("creditCardName", creditCardInfoAndParam.getCreditCardName()); paramJson.put("creditCardOrder", creditCardInfoAndParam.getCreditCardOrder()); paramJson.put("state", creditCardInfoAndParam.getState()); paramJson.put("bankId",creditCardInfoAndParam.getBankId()); } if (creditCardInfoAndParam.getParamKey().equalsIgnoreCase(Constants.BRIGHT_SPOT)){ paramJson.put(creditCardInfoAndParam.getParamKey(), creditCardInfoAndParam.getParamValue().split(",")); } else { paramJson.put(creditCardInfoAndParam.getParamKey(), creditCardInfoAndParam.getParamValue()); } json.put(creditCardInfoAndParam.getId().toString(), paramJson); } for (Long id:creditIdList){ creditCardArray.add(json.getJSONObject(id.toString())); }jsonobject其实就是个map,jsonarray是个list