需求:前端需要一个JSON格式的Tree,例如组织机构维护的时候使用到的,需要一次性返回给前端。所以编写了一个算是半通用的查询方法
1、数据库Dao层:
/**
* 根据父ID获取子数据
* @param tableName 表名
* @param pColName 父字段名
* @param pColValue 父字段名的值
* @return
*/
@Override
public List<Map<String, Object>> getList(String tableName, String pColName, String pColValue) {
String sql = "select * from "+tableName+" where "+pColName+"=:pColValue";
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("pColValue",pColValue);
return getNamedParameterJdbcTemplate().queryForList(sql, paramMap);
}
2、通用Service
/** * 获取JSONArray * @param tableName 表名 * @param pColName 父字段名 * @param colName 编号对应字段名 * @param pColValue 父字段名的值 * @return * @throws Exception */ public JSONArray getJSONArray(String tableName, String pColName,String colName,String pColValue) throws Exception{ JSONArray array = new JSONArray(); List<Map<String, Object>> areaList = getList(tableName,pColName,pColValue); for (Map<String, Object> map : areaList){ String newPvalue = map.get(colName).toString(); Map<String,Object> newMap = MapUtils.transToLowerCase(map); JSONObject object = JSONObject.parseObject(JSON.toJSONString(newMap)); object.put("children",getAreaArrayByPAreaNo(tableName,pColName,colName,newPvalue)); array.add(object); } return array; } /** * * @param tableName * @param pColName * @param colName * @param pColValue * @return * @throws IllegalAccessException */ List<Map<String,Object>> getAreaArrayByPAreaNo(String tableName, String pColName,String colName, String pColValue) throws IllegalAccessException{ JSONObject object = new JSONObject(); List<Map<String,Object>> list = new ArrayList<>(); JSONArray tmp = new JSONArray(); List<Map<String,Object>> resultList = getList(tableName,pColName,pColValue); if(resultList != null && resultList.size()>0){ for (Map<String,Object> map : resultList){ String newPvalue = map.get(colName).toString(); Map<String,Object> newMap = MapUtils.transToLowerCase(map);
List<Map<String, Object>> nodeList = getAreaArrayByPAreaNo(tableName,pColName,colName,newPvalue); if (nodeList != null && nodeList.size()>0) { newMap.put("children", nodeList); } list.add(newMap); } } return list; }
3、Action调用
/**
* 加载行政区划
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/list_area", method = RequestMethod.GET)
@ResponseBody
public ResponseResult listarea(HttpServletRequest request) throws Exception {
String tableName = "BC_AREA";
String pColName = "P_AREA_NO";
String pColValue = "0";
String colName = "AREA_NO";
//获取树形
JSONArray array = commonService.getJSONArray(tableName,pColName,colName,pColValue);
return ResultUtil.success(array);
}
最终返回的结果类似: