在運維舊項目時候,碰上sql查詢結果只能返回List<Map>
,key為表單字段名,value為獲取到的結果數據。
懶得一個一個敲出來,就直接寫個方法轉換,并賦值到相應實體對象里去。
- Map中KEY去除下劃線并首字母轉換為大寫(通用)
private Map<String,Object> mapKeyToUpper(Map<String,Object> map){Map<String, Object> newMap = new HashMap<>();for (String key : map.keySet()) {StringBuilder newKey = new StringBuilder();boolean nextToUpper = false;for (int i = 0; i < key.length(); i++) {char c = key.charAt(i);newKey.append(nextToUpper?Character.toUpperCase(c):Character.toLowerCase(c));nextToUpper = ('_' == c)?true:false;}newMap.put(newKey.toString().replace("_",""), map.get(key));}return newMap;
}
- 實際使用示例
public List<Test> getInfos(){String sql = "select r.* from t_test r left join t_test_log sl on r.id = sl.bs_id";List<Map> results = testDao.findBySql(sql);List<Test> tests= new ArrayList<>();try {for (Map map : results) {Test rf = new Test();Map newMap = mapKeyToUpper(map);BeanUtils.populate(rf, newMap);tests.add(rf);}} catch (Exception e) {throw new RuntimeException(e);}return tests;
}