最近的工作是在数据库使用myBaties查出的数据没有实体,
比如:
<select id="allTree" parameterType="String" resultType="java.util.Map">
${sql}
</select>
这样查出来
直接是object或者是List<Object>的数据,需要自己去解析获取字段名和值。
一开始想用反射,但是t好像没法获取get Set方法吧,我有点懵,后来想到转成json会好获取一点。写了几个方法。
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; /** * json 解析工具类 * @author heqiao * */ public class JsonUtil { /** * 单个对象的所有键值 * * @param object 单个对象 * * @return Map<String, Object> map 所有 String键 Object值 * ex:{pjzyfy=0.00, xh=01, zzyl=0.00, mc=住院患者压疮发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=921, zssl=0.00} */ public static Map<String, Object> getValue(Object object) { Map<String, Object> map = new HashMap<String, Object>(); Object obj = JSONObject.toJSON(object);//将对象转化为json格式对象 JSONObject jsonObject = JSONObject.parseObject(obj.toString());//转化为json对象 Set<String> s = jsonObject.keySet();//获取所有的键 for (String string : s) { map.put(string, jsonObject.get(string));//根据键获取值 } System.out.println("单个对象的所有键值===="+map.toString()); return map; } /** * 单个对象的某个键的值 * @param object 对象 * * @param key 键 * * @return Object 键在对象中所对应得值 */ public static Object getValueByKey(Object object, String key) { Object obj = JSONObject.toJSON(object);//将对象转化为json格式对象 JSONObject jsonObject = JSONObject.parseObject(obj.toString());//转化为JSONObject对象 System.out.println("单个对象的某个键的值===="+jsonObject.get(key)); return jsonObject.get(key);//根据键获取值 } /** * 多个(列表)对象的所有键值 * @param object * @return List<Map<String,Object>> 列表中所有对象的所有键值 * ex:[{pjzyfy=0.00, xh=01, zzyl=0.00, mc=住院患者压疮发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=921, zssl=0.00}, * {pjzyfy=0.00, xh=02, zzyl=0.00, mc=新生儿产伤发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=13, zssl=0.00}, * {pjzyfy=0.00, xh=03, zzyl=0.00, mc=阴道分娩产妇产伤发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=0, zssl=0.00}, * {pjzyfy=0.00, xh=04, zzyl=0.75, mc=输血反应发生率, pjypfy=0.00, rs=0, pjzyts=0.00, czydm=0037, lx=0, zssl=0.00}, * {pjzyfy=5186.12, xh=05, zzyl=0.00, mc=剖宫产率, pjypfy=1611.05, rs=13, pjzyts=7.15, czydm=0037, lx=13, zssl=0.00}] */ public static List<Map<String,Object>> getValues(List<Object> object) { List<Map<String,Object>> list=new ArrayList<Map<String,Object>>(); Object obj=JSONArray.toJSON(object);//转化为JSONArray格式 JSONArray jarr = JSONArray.parseArray(obj.toString()); //转化为JSONArray对象 for (Iterator<Object> iterator = jarr.iterator(); iterator.hasNext();) { JSONObject job = (JSONObject) iterator.next(); Set<String> s=job.keySet(); Map<String,Object> listChild=new HashMap<String,Object>(); //获取对象所有键值 for (String string : s) { listChild.put(string, job.get(string)); } //将对象添加到列表中 list.add(listChild); } System.out.println("多个(列表)对象的所有键值===="+list.toString()); return list; } /** * 多个(列表)对象的某个键的值 * @param object * @param key 要查找的值的字段名 * @return List<Object> 键在列表中对应的所有值 * ex:[住院患者压疮发生率, 新生儿产伤发生率, 阴道分娩产妇产伤发生率, 输血反应发生率, 剖宫产率] */ public static List<Object> getValuesByKey(List<Object> object, String key) { Object obj=JSONArray.toJSON(object);//将对象转化为json格式对象 JSONArray jarr = JSONArray.parseArray(obj.toString()); List<Object> list=new ArrayList<Object>(); for (Iterator<Object> iterator = jarr.iterator(); iterator.hasNext();) { JSONObject job = (JSONObject) iterator.next(); list.add(job.get(key));//根据键获取值并添加到list中 } System.out.println("多个(列表)对象的某个键的值列表===="+list.toString()); return list; } }
调用:
List<Object> o=treeService.allTree();
JsonUtil.getValue(o.get(0));
JsonUtil.getValueByKey(o.get(0), "mc");
JsonUtil.getValues(o);
JsonUtil.getValuesByKey(o, "mc");